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