在此代码中,
int a[] = {1, 2, 3, 4, 5};
printf("a = %p, &a = %p\n", a, &a);
a
和&a
的相同地址被打印。据我所知,a
是指向数组第0个元素的const指针。为什么a
的地址和其内容相等?
答案 0 :(得分:2)
为什么a的地址和它的内容相等?
不是。
在大多数情况下,类型为array的变量会衰减为指向第一个元素的指针。因此
printf("1. %p, 2. %p", (void*)a, (void *)&a[0]);
将打印相同的值。
也就是说,数组的地址与数组的第一个元素的地址相同,因此
printf("1. %p, 2. %p", (void*)a, (void*)&a);
还会打印相同的值。但是,请记住,它们不是同一类型。
a
,在这种情况下与&a[0]
相同,类型为int *
&a
的类型为int *[5]
,即指向5个int
s数组的指针。