我理解ptr是指向ptr[0]地址的指针。
因此,我认为*ptr会代表ptr[0]的值。
但为什么两者显示相同的值?
这是代码。
#include <iostream>
using namespace std;
int main(void) {
int M[3][3]={{1,2,3},{4,5,6},{7,8,9}};
int (*ptr)[3]; int *p; int **pt;
ptr = M;
cout << ptr << " " << *ptr;
return 0;
}
我期待对此有一个明确的答案。
此外,我想知道如何打印出 ptr[0]。
当
是一个指针数组时,为什么ptr
和*ptr
显示相同的值?ptr
你的解释是错误的
ptr
是错误的。特别是 ptr
不是指针数组,而是指向 int[3]
. 类型数组的指针
这意味着
ptr
的类型是 int (*)[3]
这反过来意味着 *ptr
的类型是 int[3]
。现在由于称为 array to pointer decay 的属性,此结果数组衰减为 int*
(表示指向其第一个元素的指针)并为您提供观察到的输出。
更重要的是,请注意
ptr
指向第一个内部数组{1,2,3}
,它与*ptr
具有相同的值。也就是说,ptr
和*ptr
的类型不同,但它们的值对于给定数组是相同的。
我想知道如何打印出来
.ptr[0]
从上面的讨论我们可以看出,
*ptr
和ptr[0]
是一样的,所以你已经得到了你想要的值。