我们有
int a[2] = { 0, 1 } ;
std::cout << &a ;
std::cout << a ;
现在,当我运行它时,两者的输出相同!
我所理解的是a
衰减到指针并给出了数组的第一个元素的地址,即a[0]
的地址。
与打印std::cout << &a[0]
类似。
现在不应该std::cout << &a
给我一个错误,因为a
本身会返回一个指针?
答案 0 :(得分:3)
首先,关于
“
a
本身会返回一个指针
不,数组到指针的衰减只发生在需要指针的上下文中。例如,它不会发生在sizeof
或decltype
或typeid
表达式中,或者通过引用函数传递数组时,或者当地址传递给地址时应用了运算符&
。
&a
和&a[0]
(或只是a
当衰减到指针时)引用相同的内存地址,即a
的第一项,但具有不同的类型。
&a
是指向整个数组的指针,&a + 1
因此指向第一个数组之后的第二个数组。
&a[0]
(或只是腐朽的a
)是指向第一项的指针,因此&a[0] + 1
指向第二项。