例如,
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/