加入收藏 | 设为首页 | 会员中心 | 我要投稿 PHP编程网 - 钦州站长网 (https://www.0777zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

解读C语言:指针和数组(一)

发布时间:2022-11-21 12:38:40 所属栏目:PHP教程 来源:
导读:  介绍

  指针与地址

  1> 内存组织方式

  (1) 内存是一个个单元组成的,每一个内存单元中存放一个字节(8位)的二进制信息。

  (2) 机器中的内存单元是有序排列的。

  (3) 机器给各
  介绍
 
  指针与地址
 
  1> 内存组织方式

  (1) 内存是一个个单元组成的,每一个内存单元中存放一个字节(8位)的二进制信息。
 
  (2) 机器中的内存单元是有序排列的。
 
  (3) 机器给各个内存单元规定不同地址来管理内存。这样,CPU通过地址来识别不同的内存单元php指针,正确的对内存单元进行操作。
 
  2> 指针与变量的关系(P:是指针变量,C:内存对象)
 
  >>> P:保存C:中的单元首地址——这里的地址不是物理地址,而是经过地址映射后的虚拟地址,即逻辑地址。
 
  >>> P:为指向C:的指针
 
  3>理解指针
 
  >>> 指针占用的内存空间大小:32位系统占用4byte,64为8byte。
 
  机器配置:
 
  打印指针大小:
 
  >>> 指针就是地址——我们可以把指针认为是用来存放地址的数据类型。不能把指针简简单单的当成一个整型数,虽然地址的值是一个 整型数据 。
 
  >>> 指针是有类型的,但是这个类型不是给指针分配内存的,而是用来寻址的。
 
  指针与函数参数
 
  1.普通参数:C语言通过传值方式将值传递给被调用函数。
 
  >> 会把变量的值复制一份给被调用函数。
 
  >> 复制:会把变量的值赋值给一个新的变量(参数)——变量和新的变量必须有相同的存储容量。
 
  >> 被调用函数并不能修改主调程序中的变量值,因为被调用函数使用的是一个复制过来的内存单元。
 
  2.指针参数: 本质上跟普通参数传递是相同的,也进行了变量复制,但是传过去的值是地址。 被调用函数通过地址能够访问和修改主调程序中变量的值。
 
  3.参数在内存消耗
 
  普通参数:取决于申明类型。char:1个字节; short :2个字节;long:8个字节
 
  指针参数:指针变量里存储的是地址(一般是4个字节——32位),永远是一个固定长度,不管是什么类型的指针。——除非处理器变化不是32位。
 
  4.double * dp , atof(char *) 这里的dp是指针变量,而atof是函数
 
  指针与数组
 
  1.指针操作数组快于下标操作数组
 
  2.数组的空间分配.如int a[10];——会在空间分配出40个相邻的内存单元来(10*4)。
 
  php指针_php foreach 指针_php指针
 
  3.指针操作数组
 
  int *pa;
 
  pa = &a[0];
 
  php指针_php foreach 指针_php指针
 
  4.指针移动
 
  int *pa;
 
  int a[10];
 
  pa = &a[0];
 
  pa+1将指向下一个元素a[1]:
 
  >> 内存中的变化:”指针加1″会根据指针指定的类型int移动4个内存单元,其实本身并没有移动,只是pa+1等于第5个内存单元地址——“指针加1”中的1的大小是取决于pa的类型int的,指针类型决定指针跨内存单元的步长。
 
  >> pa+1 等于是指向第5个内存单元——a[1]的第一个内存单元。
 
  5.规则:
 
  >> &a[i]和a+i含义相同,相互使用。a+i是a之后第i个元素地址。
 
  >> 数组名代表数组第一个元素的地址。
 
  地址运算符
 
  1. 指针初始化:0或表示地址的表达式。
 
  2. “指针加1”中的“1”的大小根据数据类型的长度按比例缩放。如果int类型占4个字节的存储空间,对应的1按4倍计算。
 
  3.指向不同数组的元素的指针之间的算术或比较运算都没有定义。
 
  4.指针相减:如果p和q指向相同数组中的元素,且p
 
  运行结果:
 
  流程变化:q-p=16 => 16/4=4 (按照int型所占内存单元等比例缩放) => 4 + 1 = 5;
 
  总结
 
  这次写关于c语言方面指针,是因为这两天看php内核文件的时候,由于C方面的欠缺,所以看着很吃力。所以想再复习下C语言。
 
  为什么从指针入手呢?可能是因为指针在C语言中是比较难的。所以先把最难的啃下来。
 
  本来是想一次性写完,可是指针这方面内容太多,所以决定分几批写。
 
  我在C语言方面还是很薄弱,如果文章中有错误,希望高手们指点下。
 

(编辑:PHP编程网 - 钦州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!