You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何二维数组指针ptr与*ptr输出值相同?如何打印ptr[0]?

问题解答

为什么ptr和*ptr输出结果相同?

首先明确ptr的类型:int (*ptr)[3]是指向包含3个int元素的数组的指针。

在C++中,二维数组M的名字会隐式退化为指向其第一个元素的指针——这里M的第一个元素是M[0](一个int[3]类型的数组),所以ptr = M是合法的,此时ptr指向的是M[0]这个数组的起始地址。

当你用cout输出ptr时,打印的是这个指针存储的地址值,也就是M[0]的起始地址。

而*ptr是对ptr的解引用,得到的是M[0]这个数组本身。但在表达式中,数组名又会再次隐式退化为指向其第一个元素(M[0][0])的指针,这个指针的地址值同样是M[0]的起始地址。

所以两者输出的地址值完全一致,看起来结果相同。

如何打印ptr[0]的内容?

ptr[0]等价于*(ptr + 0),也就是*ptr,对应M[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];
    ptr = M;

    // 打印ptr[0]的所有元素
    cout << "ptr[0]的内容:";
    for (int i = 0; i < 3; ++i) {
        cout << ptr[0][i] << " ";
    }
    cout << endl;

    return 0;
}

运行这段代码会输出:ptr[0]的内容:1 2 3

你也可以直接把ptr[0]转换成int*指针来遍历,效果是一样的:

int* arr_ptr = ptr[0];
for (int i = 0; i < 3; ++i) {
    cout << arr_ptr[i] << " ";
}

内容的提问来源于stack exchange,提问作者user21556643

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 22:37:45