数组和指针变量之间的混淆

时间:2015-02-16 05:44:41

标签: c++ arrays pointers

我们有

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

现在,当我运行它时,两者的输出相同!

我所理解的是a衰减到指针并给出了数组的第一个元素的地址,即a[0]的地址。

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

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

1 个答案:

答案 0 :(得分:3)

首先,关于

  

a本身会返回一个指针

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


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

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

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