2

可能重复:
C:为什么数组的地址等于它的值?

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

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

为什么它们是一样的?

4

3 回答 3

7

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

&a中,a仍然指定数组本身,数组&a的地址也是如此。这有类型int (*)[2]

由于数组的第一个元素位于数组的开头,因此数组的地址和第一个元素的地址必然重合,所以你看到的值相同。

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

于 2012-10-13T06:29:01.647 回答
2

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

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

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

于 2012-10-13T06:27:36.210 回答
0

&a是常量数组的基地址。这a也是第一个元素。

于 2012-10-13T06:27:08.857 回答