为什么存储在数组中的地址值与其自己的地址相同,它应该指向某个不同的地址(&arr[0])?

  • 本文关键字:地址 arr 数组 存储 自己的 c++ arrays pointers
  • 更新时间 :
  • 英文 :

#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]之间的类型不匹配。前者将引用数组类型,而后者将引用元素类型。用它们进行算术运算将导致截然不同的结果。

最新更新