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

时间:2018-11-03 10:07:16

标签: c++ arrays pointers memory-address stack-memory

在此代码ar&ar中相同。但是ar并不只是指向ar[0]的常量指针吗?那么我想写cout<<ar;应该给ar[0]的内存地址,而写cout<<&ar;应该给它{自己的记忆地址,因此应该有所不同。它们如何相同?有人说ar不是一个指针,而不是cout<<*ar等于ar[0]的值,如果它不是指向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;

1 个答案:

答案 0 :(得分:1)

int ar[3] = {1,2,3};

ar是一个“数组指示符”,其中自动强制转换指向第一个数组元素的指针。 ar等同于&a[0]。这样ar的类型为int *

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

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

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

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