c++ - 为什么下面的数组解引用指针具有相同的值 : the pointer to an array, ?

标签 c++ c pointers

例如,

int array[5] = {1}: // array of 5 integers
int (*ptr)[5] = &array; // pointer to an array of 5 integers

以下具有相同的值:

*ptr;
ptr;

如果我调用 printf("%p, %p", *ptr, ptr); 两个输出将完全相同。这是为什么?

最佳答案

在此声明中

int (*ptr)[5] = &array;

指针ptr由数组的地址初始化。数组的地址是其第一行第一个元素的地址。

表达式

*ptr;

为您提供对一维数组的第一个元素的引用 - 第一行或更准确地说是原始数组。

反过来,表达式数组被转换为指向其第一个元素的指针,而等价于表达式array*ptr被转换为指向该数组的指针类型的右值。数组的第一个元素*ptr。:) 即表达式 *ptr 将具有类型 int * 第一行的地址和第一行第一个元素的地址相同。 现在您有两个指针,ptr*ptr,第一个指针的类型为 int ( * )[5],而第二个指针的类型为 int * 但两者具有相同的值。

关于c++ - 为什么下面的数组解引用指针具有相同的值 : the pointer to an array, ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27748519/

相关文章:

C++ 删除指针(释放内存)

c++ - 如何始终在一行中获得一条 C++ 语句? (格式化/ clang-format )

c++ - 使用 Boost Graph Library 从多个来源进行广度优先搜索

c++ - C++ 中的文件句柄(Perl 中的 __DATA__)

c - 检查地址范围是否在进程地址空间中的石蕊测试?

C - 单链表 : problems with scanf and pointers

c++ - 针对 Boost 库编译 Nuke 插件

C - 找到极限之间的所有友好数字

c - 欧拉计划 29

c - C 中赋值中的不兼容类型