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

Fio*_*ser 2 c pointers

可能重复:
C:数组的地址如何等于它的值?

int a[2];
printf("%u %u", (int)(&a), (int)(a));
Run Code Online (Sandbox Code Playgroud)

我在想这&a是一个指向地址的指针a.第二个a意味着数组的起始地址.

他们为什么一样?

caf*_*caf 7

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

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

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

(实际上你应该使用%p格式说明符来打印指针).