数组名与数组首地址的关系
int a[5][10];
a和&a都是数组a[5][10]的首地址。那么它们有什么不同呢?实际上,它们代表的类型不同。a是int
a[10]对应的类型int
(*A)[10],而&a则是a[5][10]对应的类型int
(*A)[5][10]。大家知道,指针运算中的“
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]的地址。
下面的例子和代码可以证明这个关系: