可能重复:
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是地址aa是数组本身(它的开头)&a[0]也是同一个地址,因为它是第一个元素因此,如果您总是将这些示例转换为int,它将是a的地址。事实上,如果类型转换正确,数组的第一个元素总是在它的起始地址,因为它a单独指向它的第一个元素。
&a是常量数组的基地址。这a也是第一个元素。