当前位置:首页 > 指针与数组的关系综述
指针与数组的关系综述
摘要:从数组元素和地址的表示入手,介绍了列地址、行地址的概念,介绍了数组元素的多种表示方法,对数组和指针的关系予以了探讨。
关键词:数组;指针;地址
中图分类号:TP311文献标识码:A文章编号:1009-3044(2011)16-3876-03
Review the Relationship between Pointers and Arrays REN Zheng-yun
(Jingchu University of Technology, Jingmen 448000, China) Abstract: From an array element and address, this article introduces the concept of the column address and row address. Then, this article introduces multiple representations of data element. Finally, the relationship of arrays and pointers is discussed.
Key word: array; pointer; address
C语言中,指针与数组的关系密不可分,数组名表示数组的首地址,首地址是个常量,而指针又可以完成对数组下标的操作。数组的维数不同,数组元素的地址表示和用指针处理的方法也不同,下面加以讨论。
1 一维数组元素的表示方法 有定义int a[5],*p;
如果有“p=&a[0];或p=a ;”则一维数组元素的表示方法有:
1)数组下标的表示法
用数组名加下标来表示数组元素,如a[1],a[2]等。 2)“数组名+偏移量”的表示法
由于数组名也是数组第1个元素的地址(首地址),数组名加整数i就是第i+1个元素的地址,对该地址进行复引用运算符*运算,就可得到该元素,因此有:*a、*(a+0)和a[0]等价, *(a+i) 和a[i]等价。这里的偏移量和偏移字节数是有区别的,偏移的字节数是基类型字节数的i倍(即偏移字节数=基类型字节数*i,有列基类型字节数和行基类型字节数的区别)。
3)指针带下标的表示法
由于有“p=a ;”,这时指针是可以带下标的,带下标的指针就相当于数组元素,如:p[0]和a[0]等价,p[i]和a[i]等价。 4)“指针+偏移量”表示法
指针加一个整数i,就表示第i+1个元素的地址,再用复引用运算符*就可得到该元素。如: *(p+0)、*p、*a和a[0]等价,*(p+i) 、*(a=i) 和a[i]等价。 例1、一位数组元素的多种表示方法。
#include \ main()
{int i,j,a[4]={10,20,30,40},*p=a;
for(i=0;i 这里*(*(a+1)+2)中的内部的括号不能省,因为1和2的级别不同1代表行,2代表列,如果去掉括号,则变成了*(*a+3)。此时是a[0][3]而不是原来的a[1][2]了。 2)用行地址表示数组元素
欲用行地址表示数组元素,首先要把行地址转换为列地址,再按照列地址的方法引用元素。把行地址转换为列地址的方法非常简单,只要在它的前面加个复引用运算符“*”即可。如a+1表示第2行的首地址,则*(a+1)就表示第2行地1列的地址;接下来*(a+1)+2就表示第2行地3列的地址,于是*(*(a+1)+2)就表示第2行第3列的元素a[2][3]。这里使用了两个复引用运算符,内部的副引用运算符是把行地址降格为列地址,外部的复引用是求具体的元素。表1总结了前面所提到的二维数组的地址不同的表示形式(设有定义int a[3][4];)。
2.3 二维数组指针
因为二维数组的地址有行地址和列地址两种情况,所以和地址对应的指针也有两种,分别称为行指针和列指针。 1)二维数组的列指针
列指针是指向具体元素的指针,它接收具体元素的地址。
用列指针对具体变量的引用也有两种方法:下标法和偏移量法。
①下标法。考虑到二维数组在内存中的存放形式,可以用列指针带下标标明数组中的元素,如有定义“inta[3][4],*p;”若p=a,则p[3]就代表数组a的第4个元素。
②偏移量表示法。该方法是指用元素所处的行列数计算出该元素距数组首元素的偏移量,再引用该处的元素。如有数组a[3][4],则数组中第2行第3列元素的偏移量为(2-1)*4+(3-1)=6,则*(p+6)就代表a[1][2]。一般地,第i行第j列的偏移量为(i-1)*n+(j-1),其中n为数组的列数,*(p+i*n+j)即代表a[i][j](第i+1行、第j+1列处的元素)。 例2、利用列指针实现对二维数组的操作。 #include \ main()
{int a[3][4],*p,i,j; p=*a; for(i=0;i
共分享92篇相关文档