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

C++实现通用2D数组打印方法 解决int (*)[n]转int**类型报错问题

问题原因解释

静态二维数组的内存布局和int**类型不兼容:int list[2][2]是连续存储的2行2列数据,变量名list退化为指针后的类型是int (*)[2](指向长度为2的int数组的指针),而int**是指向int指针的指针,二者底层逻辑完全不同,因此直接传参会报类型转换错误。你修改为int (*list)[2]后虽然能运行,但参数里的列数2是硬编码的,无法适配其他列数的数组。

通用实现方案

方案1:模板自动推导数组尺寸(最优,无需手动传行列)

直接用模板接收静态二维数组的引用,编译器会自动推导行列数,完全不需要手动指定参数,可适配任意尺寸的静态二维数组。
完整可运行代码示例:

#include <iostream>
using namespace std;

// 模板自动推导二维数组的行数ROW和列数COL
template<int ROW, int COL>
void printArray2D(int (&list)[ROW][COL]) {
    for (int i = 0; i < ROW; ++i) {
        for (int j = 0; j < COL; ++j) {
            cout << list[i][j] << " ";
        }
        cout << endl;
    }
}

int main()
{
    int list1[2][2] = { {1,2},{3,4} };
    int list2[3][4] = { {1,2,3,4}, {5,6,7,8}, {9,10,11,12} };

    // 直接传数组名即可,不需要手动计算行列
    cout << "list1输出:" << endl;
    printArray2D(list1);
    cout << "list2输出:" << endl;
    printArray2D(list2);

    return 0;
}

方案2:兼容动态二维数组的重载版本

如果你同时需要支持new出来的动态二维数组(int**类型),可以新增一个函数重载,两种场景都能覆盖:

// 重载版本:接收动态分配的int**二维数组
void printArray2D(int** list, int row, int col) {
    for (int i = 0; i < row; ++i) {
        for (int j = 0; j < col; ++j) {
            cout << list[i][j] << " ";
        }
        cout << endl;
    }
}

// 动态数组调用示例:
// int** dyn_list = new int*[2];
// for(int i=0; i<2; i++) dyn_list[i] = new int[2]{i*2+1, i*2+2};
// printArray2D(dyn_list, 2, 2);

方案3:C风格无模板兼容实现

如果不想使用C++模板,可以把入参改为一维int指针,调用时传入数组首元素地址,手动计算偏移量访问元素:

void printArray2D(int* list, int row, int col) {
    for (int i = 0; i < row; ++i) {
        for (int j = 0; j < col; ++j) {
            cout << *(list + i * col + j) << " ";
        }
        cout << endl;
    }
}

// 调用示例:
// int row1 = sizeof(list1) / sizeof(list1[0]);
// int col1 = sizeof(list1[0]) / sizeof(list1[0][0]);
// printArray2D(&list1[0][0], row1, col1);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 01:06:07