数组名称的C ++值

时间:2014-04-25 18:45:26

标签: c++ arrays

#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]地址的指针,它是一个好用的方法吗?

感谢您的回答。

2 个答案:

答案 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]