数组和指针变量的混淆
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
不,数组到指针的衰减只发生在需要指针的上下文中。例如,它不会发生在 sizeof
或 decltype
或 typeid
表达式中,或者当数组通过引用传递给函数时,或者像这里一样,当地址运算符 &
已应用。
&a
和&a[0]
(或者只是a
当衰减到指针)指的是相同的内存地址,即a
的第一项,但有不同类型。
&a
是指向整个数组的指针,因此 &a + 1
指向第一个数组之后的第二个这样的数组。
&a[0]
(或只是衰减的 a
)是指向第一项的指针,因此 &a[0] + 1
指向第二项。
我们有
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
不,数组到指针的衰减只发生在需要指针的上下文中。例如,它不会发生在 sizeof
或 decltype
或 typeid
表达式中,或者当数组通过引用传递给函数时,或者像这里一样,当地址运算符 &
已应用。
&a
和&a[0]
(或者只是a
当衰减到指针)指的是相同的内存地址,即a
的第一项,但有不同类型。
&a
是指向整个数组的指针,因此 &a + 1
指向第一个数组之后的第二个这样的数组。
&a[0]
(或只是衰减的 a
)是指向第一项的指针,因此 &a[0] + 1
指向第二项。