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
相关产品推荐
相关产品推荐

