&a[0]表示第一个元素变量的地址值
a表示数组第一个元素的地址
#include <stdio.h>
int main() {
int a[5]; //a是数组名
//int b[3][4];
int b[5];
//a = b; 报错error a是常量
// printf("%lf\n", &a[0]);
printf("&a[0]=%#X\n", &a[0]);
printf("&a[0]+1=%#X\n", &a[0]+1);
printf("&a[1]=%#X\n", &a[1]);
printf("&a=%#X\n", &a);
printf("a=%#X\n", a);
printf("&a+1=%#X\n", &a+1);
printf("a+1=%#X\n", a+1);
// printf("%#X\n", 470812087); //0X1C1005B7
while (true){ }
}
可以看到虽然a和&a的地址是一样的,但是a+1的地址向后走了四个字节,也就是跳过了一个元素。所以a代表的是首元素的地址
&a+1可以看到和arr相差20个字节,是跳过了整个数组。那么&a表示的是取整个数组的地址,而不是数组首元素的地址 。
&a[0]表示首元素的地址
&a[0]+1=&a[1] &a[1]表示第二个元素的地址
从输出结果可以看出,数组的元素的地址是连续的