数组和指针变量的混淆

Confusion between array and pointer variable

我们有

int a[2] = { 0, 1 } ; 
std::cout << &a ;
std::cout << a ; 

现在当我运行它时,两者的输出是一样的!

据我了解,a 衰减为一个指针,并为我提供了数组第一个元素的地址,即 a[0] 的地址。

类似于打印 std::cout << &a[0]

现在不应该 std::cout << &a 给我一个错误,因为 a 本身 returns 是一个指针?

首先,关于

a itself returns a pointer

不,数组到指针的衰减只发生在需要指针的上下文中。例如,它不会发生在 sizeofdecltypetypeid 表达式中,或者当数组通过引用传递给函数时,或者像这里一样,当地址运算符 & 已应用。


&a&a[0](或者只是a当衰减到指针)指的是相同的内存地址,即a的第一项,但有不同类型。

&a 是指向整个数组的指针,因此 &a + 1 指向第一个数组之后的第二个这样的数组。

&a[0](或只是衰减的 a)是指向第一项的指针,因此 &a[0] + 1 指向第二项。