c – 为什么arr和arr一样? - 代码日志

c – 为什么arr和arr一样?

我已经编程c / c多年,但今天的意外发现使我有点好奇…为什么两个输出在下面的代码中产生相同的结果? (arr当然是arr [0]的地址,也就是指向arr [0]的指针,我希望& arr成为该指针的地址,但与arr具有相同的值)

  int arr[3];
  cout << arr << endl;
  cout << &arr << endl;

备注:这个问题已经关闭了,但现在又被打开了。 (谢谢 ?)

我知道& arr [0]和arr评估为相同的数字,但这不是我的问题!问题是为什么&arr和arr评估为相同的数字。如果arr是一个字面的(不存储的),那么编译器应该抱怨说,arr不是一个左值。如果arr的地址存储在某处,那么& arr应该给我该地址的地址。 (但事实并非如此)

如果我写

const int* arr2 = arr;

那么对于任何整数i,arr2 [i] == arr [i],而& arr2!= arr。

他们不一样他们只是在同一个内存位置。
例如。你可以写arr 2来获取arr [2]的地址,但是不能(& arr)2做同样的事情。
此外,尺寸和尺寸与尺寸不同。
http://stackoverflow.com/questions/8916656/why-is-arr-and-arr-the-same

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:c – 为什么arr和arr一样?