int a[2];
printf("%u %u", (int)(&a), (int)(a));
我认为&a
是一个指向a
地址的指针。第二个a
表示数组的起始地址。
为什么它们一样?
答案 0 :(得分:7)
在除了它是一元&
或sizeof
运算符的操作数之外的任何上下文中,数组名a
求值为指向数组第一个成员的指针。其类型为int *
。
在&a
中,a
仍然指定数组本身,因此&a
是数组的地址。其类型为int (*)[2]
。
由于数组的第一个元素位于数组的开头,因此数组的地址和第一个元素的地址必然是重合的,这就是为什么你看到相同的值。
(你真的应该使用%p
格式说明符来打印指针)。
答案 1 :(得分:2)
那是因为他们都指向同一个地址。
&a
是a
a
是数组本身(它的开头)&a[0]
也是同一个地址,因为它是第一个元素因此,如果您始终将这些示例投放到int
,那么它将是a
的地址。事实上,数组的第一个元素总是在它的起始地址,因为a
单独指向它的第一个元素,如果正确地进行了类型转换。
答案 2 :(得分:0)
&a
是数组的基址,是常量。并且a
拥有第一个元素。