#include<iostream>
using namespace std;
int main()
{
int arr[3]{0,1,2};
cout<<"The value of arr "<<arr<<'n';
cout<<"The address of &arr "<<&arr<<'n';
cout<<"The address of &arr[0] "<<&arr[0]<<'n';
cout<<"The value in arr[0] "<<arr[0]<<'n';
}
OUTPUT
The value of arr 0x7ffd1a658e74
The address of &arr 0x7ffd1a658e74
The address of &arr[0] 0x7ffd1a658e74
The value in arr[0] 0
这里数组arr中的地址值与 &arr 相同,因为数组是指向其第一个元素的指针,因此值 arr 应该等于等于 &arr[0],发现等于&arr。那么为什么 arr可以有两个值:地址值 &arr[0] 和 arr[0] 的值,因为 arr = &arr[0] = &arr
让我们分解一下:
arr
被计算为指向其第一个元素的指针。因此,它返回数组第一个元素的地址。-
&arr
是"数组的地址",它被计算为其第一个元素的地址。我想你被困在这个问题上,因为arr
本身被评估为指向第一个元素的指针,因此它应该是"第一个元素的地址的地址"。但在这种情况下,数组不是首先计算到指向第一个元素的指针,它只是按原样返回它的地址。 -
&arr[0]
正在访问arr
的第一个元素,然后检索该元素的地址。
因此,所有这三个元素都将返回第一个元素的地址。
编辑:应该注意的一件事是&arr
和&arr[0]
之间的类型不匹配。前者将引用数组类型,而后者将引用元素类型。用它们进行算术运算将导致截然不同的结果。