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

C++矩阵转置报错:int (*)[2]类型与int **参数不兼容

问题分析与解决

错误原因

你传入的int a[3][2]是固定大小的二维数组,它的类型是int (*)[2](指向包含2个int元素的一维数组的指针),而trans函数的参数要求是int**(指向int指针的指针),这两种类型不兼容:

  • 二维数组在内存中是连续的整块存储;
  • int**指向的是一个指针数组,每个指针对应独立的int数组,内存布局不连续。

另外原代码存在内存分配错误:转置后的矩阵是c行r列,但你只分配了r个指针,且未给每个指针分配对应的int数组,直接赋值会触发未定义行为。

解决方案1:修改函数参数适配固定列数的二维数组

直接调整函数参数类型匹配二维数组,同时修正内存分配逻辑:

#include <iostream>
using namespace std;

// 参数改为指向含2个int的数组的指针,对应原数组的列数
int** trans(int (*arr)[2], int r, int c) {
    // 转置后是c行,分配c个指针
    int** transpose = new int*[c];
    // 为每行分配r个int的空间
    for (int i = 0; i < c; ++i) {
        transpose[i] = new int[r];
    }

    // 完成转置赋值
    for (int i = 0; i < r; ++i) {
        for (int j = 0; j < c; ++j) {
            transpose[j][i] = arr[i][j];
        }
    }

    return transpose;
}

int main() {
    int r = 3, c = 2, i, j;
    int a[3][2] = {{1, 2}, {3, 4}, {5, 6}};
    int** ans = trans(a, r, c);

    // 输出转置后的矩阵(c行r列)
    for (i = 0; i < c; ++i) {
        for (j = 0; j < r; ++j)
            cout << ans[i][j] << " ";
        cout << endl;
    }

    // 手动释放动态分配的内存,避免内存泄漏
    for (int i = 0; i < c; ++i) {
        delete[] ans[i];
    }
    delete[] ans;

    return 0;
}

解决方案2:用模板实现通用二维数组转置

如果需要支持任意行列的二维数组,可以用模板函数自动推导数组尺寸:

#include <iostream>
using namespace std;

// 模板参数R是原数组行数,C是原数组列数
template<int R, int C>
int** trans(int (&arr)[R][C]) {
    int** transpose = new int*[C];
    for (int i = 0; i < C; ++i) {
        transpose[i] = new int[R];
    }

    for (int i = 0; i < R; ++i) {
        for (int j = 0; j < C; ++j) {
            transpose[j][i] = arr[i][j];
        }
    }

    return transpose;
}

int main() {
    int a[3][2] = {{1, 2}, {3, 4}, {5, 6}};
    int** ans = trans(a);

    // 转置后是2行3列
    for (int i = 0; i < 2; ++i) {
        for (int j = 0; j < 3; ++j)
            cout << ans[i][j] << " ";
        cout << endl;
    }

    // 释放内存
    for (int i = 0; i < 2; ++i) {
        delete[] ans[i];
    }
    delete[] ans;

    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 13:01:06