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

标签 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;

最佳答案

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

ar 这里是一个“数组指示符”,自动转换 为指向第一个数组元素的指针。 ar 等价于&a[0]。所以 ar 的类型是 int *

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

下面的代码是有效的(指针是兼容的)

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

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

关于C++ 指针的内存地址和指针数组的内存地址如何相同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53130277/

相关文章:

C 指针、字符

c - 写入字符串时出现段错误

变量地址的C地址

Android OpenGL - 帮助进行 C++ 转换

c++ - GCC 10.2 不接受 lambda 空 lambda 作为 constexpr std::function<void()>

用于处理 2D 点、数组、列表或其他的 Java 数据结构?

用 C 语言编写多种模式?

c++ - 在可执行文件中使用嵌入的 .dll

c++ - 将子类指针存储在父类指针的映射中

arrays - 在 Angular 2 中将 Json 数据从服务器存储到数组