【问题标题】:Shouldn't the address of an array be a double pointer? [duplicate]数组的地址不应该是双指针吗? [复制]
【发布时间】:2012-10-03 22:42:21
【问题描述】:

可能重复:
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表示数组的起始地址。

为什么它们是一样的?

【问题讨论】:

  • 为什么要将地址转换为有符号整数,然后使用无符号整数格式说明符打印它们?你有一份工作!
  • 看完链接后,我应该把 &a[0] 当作 &a 吗?
  • @Fionser: 不,&a[0] 等价于 a(除了作为 &sizeof 的操作数)。

标签: c pointers


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

      &a 是常量数组的基地址。还有a 包含第一个元素。

      【讨论】:

        猜你喜欢
        • 2011-11-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-07-08
        • 2011-03-19
        • 1970-01-01
        相关资源
        最近更新 更多