分享

1.指针与数组之间的等价关系式★

 不知者白沫 2015-08-24
  在C语言中,指针与数组有着密切的关系,这种关系表现在对数组元素的引用可以改写成对指针的间接引用。有数组a,则a[i]与*(a+i)等价;有指针变量p,则*(p+i)与p[i]等价。

  ①

  (下标法) a[i] <=> *(a+i) (地址法)

  a[0] <=> *a

  a[1] <=> *(a+1)

  a[2] <=> *(a+2)

  ……

  C语言规定:数组名a表示此数组的首地址。

  也即:a <=> &a[0]

  同理: a+0 <=> &a[0]

  a+1 <=> &a[1]

  a+i <=> &a[i]

  数组变量a没有专属于自己的存储单元,并不是一个真正的变量。数组变量a的右值并非在某个存储单元中存储,而是人为规定的, 数组变量a有存储单元但并不真正属于自己,数组变量a的右值只是规定的,数组变量只能算作虚拟的变量。 引用一个数组元素,既可以利用前面介绍的下标法(通过数组名和下标来实现),也可以利用地址法(通过给出的地址来访问)。

  ② *(p+i) <=> p[i]

  如果一个整型指针变量pi的右值为0x0012 ff00,则pi + 1的值是多少呢?

  做加法运算时变量pi应表现为右值0x0012 ff00, pi + 1的结果也为指针变量且指向后面相邻的整型存储单元, 因此新的指针变量pi+1的右值为0x0012 ff04.

  数据名实质上是一个指针常量(即一个具体的地址值)。

  ⊙前提:..当一个指针变量p指向一个数组a[]时.

  其实就是把数组名a这个指针常量赋给了指针变量p,此时p与a是等价的,p[i]即a[i]。

  而指针变量的+1操作,并不是真的其值就比原值多1,而是按其指向的数据类型来决定增加多少。因此当指向数组a的指针p每+1便指向数组中的下一个元素,+i当然就指向数组中第i个元素.

  即*(p+i) <=> a[i] <=> p[i]

   —— 不知者白沫

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多