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

C语言矩阵加法结果中为何出现间隔零值?

矩阵加法异常问题的解决方案

问题根源

你的代码核心问题是矩阵加法函数的参数类型不匹配,导致内存访问错误:

  • addMatrices函数的第三个参数声明为int *result[3][3],这是一个3×3的指针数组,而非我们需要的二维整数数组。
  • 主函数中传入&result(二维数组的地址,类型为int (*)[3][3]),与函数期望的参数类型不兼容,赋值时会错误地操作内存,最终导致结果矩阵出现交替的0和正确值。

修正方案

1. 修改addMatrices函数的参数类型

将第三个参数改为二维整数数组类型,C语言中二维数组作为函数参数时会退化为指向一维数组的指针,直接使用int result[3][3]即可:

void addMatrices(int m1[3][3], int m2[3][3], int result[3][3])  {
    int row;
    int col;
    for (row=0; row < 3; row++) {
        for (col=0; col<3;col++) {
            result[row][col] = m1[row][col] + m2[row][col];
        }
    }
}

2. 修正主函数的调用方式

直接传递result数组名即可(数组名会隐式转换为指向首元素的指针),不需要取地址:

int result[3][3];
int sampleM1[3][3] = {{1,1,1}, {1,1,1}, {1,1,1}};
int sampleM2[3][3] = {{1,1,1}, {1,1,1}, {1,1,1}};
addMatrices(sampleM1, sampleM2, result);
printMatrix(0, result);

3. 验证结果

修正后运行代码,两个全1的3×3矩阵相加会得到全2的矩阵,符合预期:

matriks 0:
 2 2 2
 2 2 2
 2 2 2

补充说明

如果一定要使用指针形式传递二维数组,也可以将addMatrices的第三个参数声明为int (*result)[3][3],此时函数内的赋值需要解引用指针:

void addMatrices(int m1[3][3], int m2[3][3], int (*result)[3][3])  {
    int row;
    int col;
    for (row=0; row < 3; row++) {
        for (col=0; col<3;col++) {
            (*result)[row][col] = m1[row][col] + m2[row][col];
        }
    }
}

对应的主函数调用保持addMatrices(sampleM1,sampleM2,&result);即可,但这种写法不如直接传递数组直观,推荐使用第一种修正方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 13:31:00