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

C语言如何从自定义函数返回二维数组实现3x3矩阵求和

问题分析

你原来的代码存在几个核心错误:

  • 自定义函数addierer当前返回值是单个int类型,无法直接返回整个3x3二维数组,而且函数内定义的二维数组d是栈上的局部变量,函数执行结束后内存会被回收,就算返回地址也会触发非法访问。
  • 主函数中a[i][j] = addierer()的写法越界:你定义的a数组大小是3x3,合法下标是i∈[0,2]、j∈[0,2],但此时你赋值用的i、j值都是3,已经超出数组访问范围,属于未定义行为。
  • 你尝试给整个数组直接赋值的逻辑不符合C语言语法,C语言不支持直接用=给整个数组批量赋值。
修正方案

可以直接把主函数里定义的矩阵地址传到自定义输入函数里,因为数组传参是传递首地址,函数内对数组的修改会直接作用到主函数的原数组上,不需要返回值。

修正后完整代码
#include <stdio.h>
// 自定义输入函数,参数为3列的二维数组,行固定为3行
void input_matrix(int mat[3][3], char mat_name) {
    printf("\n请输入矩阵%c的元素:\n", mat_name);
    for (int i = 0; i < 3; ++i) {
        for (int j = 0; j < 3; ++j) {
            printf("请输入元素%c%d%d:", mat_name, i+1, j+1);
            scanf("%d", &mat[i][j]);
        }
    }
}

int main() {
    int a[3][3], b[3][3], sum[3][3];
    // 调用函数分别输入A矩阵和B矩阵
    input_matrix(a, 'A');
    input_matrix(b, 'B');

    // 计算矩阵和
    for (int i = 0; i < 3; ++i) {
        for (int j = 0; j < 3; ++j) {
            sum[i][j] = a[i][j] + b[i][j];
        }
    }

    // 输出结果
    printf("\n两个矩阵的和为:\n");
    for (int i = 0; i < 3; ++i) {
        for (int j = 0; j < 3; ++j) {
            printf("%d\t", sum[i][j]);
        }
        printf("\n");
    }
    return 0;
}
代码说明
  • 输入函数返回值设为void,不需要返回数据,直接修改传入的矩阵内容即可。
  • 固定3x3矩阵的场景下,直接声明参数为int mat[3][3]就可以正确接收二维数组,函数内读写mat[i][j]就是直接读写主函数里的原数组。
  • 新增mat_name参数用来区分当前输入的是哪个矩阵,避免输入时混淆。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 17:39:03