首页 > C > 数组 阅读:57,774

数组名与数组首地址的关系

int a[5][10];

a&a都是数组a[5][10]的首地址。那么它们有什么不同呢?实际上,它们代表的类型不同。aint a[10]对应的类型int (*A)[10],而&a则是a[5][10]对应的类型int (*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]:数组中第一个元素a[0][0]的地址。

 

下面的例子和代码可以证明这个关系:

 

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

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

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

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

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