首页 > C > 指针 阅读:57,774

数组名:常量指针

我们已经学习过数组的定义,并且已经知道,数组名所代表的值就是数组的首地址,一旦定义了数组之后,数组名所代表的值就不能再改变。从指针的角度来看,数组名就是一个常量指针,比如:

int a[10];

那么a就是一个常量指针,即:int *const a。因此,不能再用其它的值赋值给a。因为a是常量。

此外,数组名虽然代表了数组的首地址虽然a&a值一样,都是数组的首地址,但是,a&a的含义并不一样。对于一维数组来说:

int a[10];

&a+1中的1代表的是整个数组的长度10*sizeof(int);

a+1中的1代表的是一个元素的长度sizeof(int)

&a[0]+1中的1也代表的是一个元素的长度。

对于多维数组来说:

int a[5][10];

a&a都是数组a[5][10]的首地址。那么它们有什么不同呢?实际上,它们代表的类型不同。aint a[10]的类型,而&a则是a[5][10]的类型。大家知道,指针运算中的“1代表的是指针类型的长度。所以a+1&a+1中的1代表的长度分别为a的类型a[10]sizeof (int) * 10 &a的类型a[5][10]sizeof (int)*10*5。所以a 的首地址为1310392,那么a + 1&a + 1的地址为:

a + 1 = 1310392 + sizeof (int) * 10 = 1310392 + 4 * 10 = 1310432

&a + 1 = 1310392 + sizeof (int) * 10 * 5 = 1310392 + 4 * 10 * 5 = 1310592

更抽象点的说,如果定义一个多维数组int a[M1][M2][…][Mn],那么a + 1 = a首地址+M2*M3*…*Mn *sizeof (int);而&a + 1 = a首地址 + M1*M2*…*Mn*sizeof (int)

&a[0][0]:就是数组第一个元素的地址,它的内存字节是4个字节。因此&a[0][0]+1,此处的1代表的长度是4个字节。

周哥教IT,分享编程知识,提高编程技能,程序员的充电站。跟着周哥一起学习,每天都有进步。

通俗易懂,深入浅出,一篇文章只讲一个知识点。

当你决定关注「周哥教IT」,你已然超越了90%的程序员!

IT黄埔-周哥教IT技术交流QQ群:213774841,期待您的加入!

二维码
微信扫描二维码关注