#include <iostream>
using namespace std;
int main()
{
int foo[5] = {0,1,2,3,4};
cout << (&foo[0]) << " " << foo <<endl;
return 0;
}
输出结果为0x28feec 0x28feec。 &amp; foo [0],foo和&amp; foo有什么不同? 如果foo是指向foo [0]地址的指针,它是一个好用的方法吗?
感谢您的回答。
答案 0 :(得分:2)
foo
(不访问数组元素)将在发送到输出流时衰减到第一个数组元素(foo[0]
)的地址。
foo[0]
将返回第一个数组元素,&foo[0]
将衰减到其地址。因此两个输出值是相同的。
答案 1 :(得分:2)
区别在于类型:
foo
的类型为int(&)[5]
foo[0]
的类型为int&
&foo
的类型为int (*)[5]
&foo[0]
的类型为int*
operator<<
不接受对数组的引用,因此在cout << foo
中它将衰减为指针,与&foo[0]
相同。 &foo
是指向同一地址的指针。但是如果你使用sizeof
或者做指针算法会有很大的不同,因为那样输入很重要。
例如:
(&foo[0]) + 1 == &foo[1]
但
(&foo)[1] == &foo[5]