C++ 指针的内存地址和指向数组的内存地址如何相同?

C++ How pointer's memory address and pointed array's memory address can be same?

本文关键字:地址 内存 何相同 数组 指针 C++      更新时间:2023-10-16

在此代码中,ar&ar相同。但是ar不就是一个指向ar[0]的常量指针吗?那么我想写cout<<ar;应该给ar[0]的记忆地址,而写cout<<&ar;应该给它自己的记忆地址,所以它们应该是不同的。它们怎么一样?有人说ar不是指针,如果它不是指向ar[0]的指针,那么cout<<*ar等于ar[0]的值如何?

int ar[3] = {1,2,3};
cout<<ar<<endl;
cout<<&ar<<endl;

我的意思是在这个代码中,&a&b是不同的,这是有道理的。

int a = 5;
int* b = &a;
cout<<&a<<endl;
cout<<&b<<endl;
int ar[3] = {1,2,3};

ar这里是一个"数组指示符",它自动转换为指向第一个数组元素的指针。ar相当于&a[0]。这样ar就有一个类型int *

&aria 指向整个数组的指针,类型为int (*)[3]

以下代码有效(指针兼容)

int *par0 = ar;
int (*par)[3] = &ar;

尽管a&a具有不同的类型,但它们具有相同的值 — 第一个数组元素和整个数组的地址是相同的。