当ptr是一个指针数组时,为什么ptr和*ptr显示相同的值?

问题描述 投票:0回答:1

我理解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]。

c++ pointers
1个回答
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]
是一样的,所以你已经得到了你想要的值。

© www.soinside.com 2019 - 2024. All rights reserved.