一个数组是由连续的一块内存单元组成的,数组名就是这块连续内存单元的首地址。一个数组也是由各个数组元素(下标变量)组成的。每个数组元素按其类型不同占有几个连续的内存单元,一个数组元素的首地址也是指它所占有的几个内存单元的首地址,即数组中第一个数组元素的地址。例如“int a[10];”,数组名a就相当于&a[0]。指针变量既然可以指向变量,当然也可以指向数组元素(把某一元素的地址放到一个指针变量中)。所谓数组元素的指针就是数组元素的地址。
数组指针变量说明的一般形式为:
类型说明符 *指针变量名;
其中,“类型说明符”表示所指数组的类型。从一般形式可以看出指向数组的指针变量和指向普通变量的指针变量的说明是相同的。
假设有如下定义:
int*p,a[5]={1,2,3,4,5};
p=a;
“p=a;”相当于让指针变量p指向数组a,而指向数组相当于指向数组的起始地址,即数组第一个元素的地址,所以“p=a;”相当于“p=&a[0];”,而语句“p=&a[3]”就可以使p指向元素a[3]。
例如,指向数组元素的指针变量:
int a[10]; //定义a为包含10个整型数据的数组
int*p; //定义p为指向整型变量的指针变量
p=&a[0]; //把a[0]元素的地址赋给指针变量p
如图7.6,p、a、&a[0]均指向同一单元,它们是数组a的首地址,也是0号元素a[0]的首地址。p+1、a+1、&a[1]均指向1号元素a[1]。类推可知p+i、a+i、&a[i]指向i号元素a[i]。应该说明的是p是变量,而a、&a[i]都是常量。(www.xing528.com)
上面的语句也可以写为:
int a[10],*p;p=a;
或
int a[10],*p=a;
或
int a[10],*p=&a[0];
后两个语句中直接地给指针变量p赋地址初值(即数组a的首地址),前两个语句是先定义了一个数组a和一个指针变量p,然后又通过给指针变量p赋予数组a的地址值(数组a的首地址)。
注意:数组名a不代表整个数组中的全部数据,上述“p=a;”的作用是“把a数组的首元素的地址赋给指针变量p”而不是“把数组a各元素的值赋给p”。
图7.6 数组元素的存储
图7.7 数组元素的存储
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。