数组的地址不应该是双指针吗?

时间:2012-10-13 06:19:26

标签: c pointers

  

可能重复:
  C: How come an array’s address is equal to its value?

int a[2];
printf("%u %u", (int)(&a), (int)(a));

我认为&a是一个指向a地址的指针。第二个a表示数组的起始地址。

为什么它们一样?

3 个答案:

答案 0 :(得分:7)

在除了它是一元&sizeof运算符的操作数之外的任何上下文中,数组名a求值为指向数组第一个成员的指针。其类型为int *

&a中,a仍然指定数组本身,因此&a是数组的地址。其类型为int (*)[2]

由于数组的第一个元素位于数组的开头,因此数组的地址和第一个元素的地址必然是重合的,这就是为什么你看到相同的值。

(你真的应该使用%p格式说明符来打印指针)。

答案 1 :(得分:2)

那是因为他们都指向同一个地址。

  • &aa
  • 的地址
  • a是数组本身(它的开头)
  • &a[0]也是同一个地址,因为它是第一个元素

因此,如果您始终将这些示例投放到int,那么它将是a的地址。事实上,数组的第一个元素总是在它的起始地址,因为a单独指向它的第一个元素,如果正确地进行了类型转换。

答案 2 :(得分:0)

&a是数组的基址,是常量。并且a拥有第一个元素。