从事c/c++编程多年,但今天的意外发现让我有些好奇……为什么下面的代码中两个输出都产生了相同的结果? ( arr
is of course the address of arr[0]
, ie a pointer to arr[0]
. I would have expected &arr
to be the adress of该指针,但它具有与 arr
相同的值
int arr[3];
cout << arr << endl;
cout << &arr << endl;
备注:此问题已关闭,但现在又打开了。 (谢谢 ?)
我知道 &arr[0]
和 arr
评估为相同的数字,但这 不是 我的问题!问题是为什么 &arr
和 arr
评估为相同的数字。如果 arr
是文字(未存储任何软件),那么编译器应该抱怨并说 arr
不是左值。如果 arr
的地址存储在某个地方,那么 &arr
应该给我那个位置的地址。 (但这种情况并非如此)
如果我写
常量 int* arr2 = arr;
然后 arr2[i]==arr[i]
对于任何整数 i
,但是 &arr2 != arr
。
原文由 ragnarius 发布,翻译遵循 CC BY-SA 4.0 许可协议
他们不一样。它们只是位于相同的内存位置。例如,您可以写
arr+2
来获取 ---arr[2]
--- 的地址,但不能写(&arr)+2
来做同样的事情。此外,
sizeof arr
和sizeof &arr
是不同的。