如下代码:
#include <stdio.h>
int main()
{ int a[3]={0,1,2};
printf("%p", &a[0]); // %P输出地址。&a[0]表示数组的首元素地址
printf("%p", &a); // &a表示输出数组的地址
printf("%p", a); // a是数组名,输出也代表数组的首元素地址
}
输出为0xbf860fb8
0xbf860fb8
0xbf860fb8
结果三个输出的代码是相同的,即对于一维数组而言,这三者的输出是相同的。
但是 如果将三个都加一
printf("%p", &a[0]+1);
printf("%p", &a+1);
printf("%p", a+1);
结果为
0xbf860fbc
0xbf860fbc
0xbf860fc4
这是为什么呢?
&a[0]+1 的意思是a[0]往后一个变量的地址,即a[1]的地址,第三个输出也是如此,a+1根据结果也是如此0xbf860fbc,与上述的a[o]差了一个int的步长4。
而&a+1是输出下一个数组的地址,所以与上面的地址差了一个数组的步长,即3*4=12