二维数组行列求和函数报错求助:无法修改数据类型
解决二维数组行/列求和的函数调用与类型错误
咱们来一步步拆解你代码里的问题,然后逐一修复:
1. 函数参数类型不匹配
你声明的sumrow和sumcol函数参数是int matrix,但实际要传入的是二维数组,这种基础类型不匹配直接导致了数组下标报错。对于固定列数的二维数组,函数参数应该写成int matrix[3][4](或者更灵活的int matrix[][4]——编译器只需要知道列数就能计算数组内存偏移)。
2. 函数调用的概念错误
你写的sumrow = matrix[3][4];完全是误用:
sumrow是函数名,不能把它当成普通变量赋值matrix[3][4]本身就越界了!你的数组是3行4列,下标从0开始,最大有效下标是matrix[2][3]- 正确的调用方式是直接传入整个数组:
sumrow(matrix);
3. 循环逻辑搞反了
计算行求和时,外层应该遍历行(0到2,共3行),内层遍历列(0到3,共4列);你现在的循环变量范围和嵌套顺序完全颠倒,导致遍历逻辑错误。
4. return语句的用法错误
return printf("...", sum);是错的——printf返回的是输出的字符个数,不是你要的求和结果。如果不需要返回值,直接把函数改成void类型更合理;如果需要返回求和值,应该先打印结果,再return sum;。
修复后的完整代码
#include <stdio.h> // 修正函数参数类型,明确是3行4列的二维数组 void sumrow(int matrix[3][4]); void sumcol(int matrix[3][4]); int main () { int matrix[3][4] = { {5, 7, 4, 8}, {6, 8, 2, 4}, {2, 7, 9, 6} }; // 正确调用函数,传入整个二维数组 sumrow(matrix); printf("---\n"); sumcol(matrix); return 0; } void sumrow(int matrix[3][4]){ int i, j, sum; // 外层遍历行(3行,下标0-2) for (i = 0; i < 3; ++i) { sum = 0; // 内层遍历列(4列,下标0-3) for (j = 0; j < 4; ++j) { sum += matrix[i][j]; } printf("Sum of row %d is = %d\n", i+1, sum); // 行号从1开始显示更直观 } } void sumcol(int matrix[3][4]){ int i, j, sum; // 外层遍历列(4列,下标0-3) for (j = 0; j < 4; ++j) { sum = 0; // 内层遍历行(3行,下标0-2) for (i = 0; i < 3; ++i) { sum += matrix[i][j]; } printf("Sum of column %d is = %d\n", j+1, sum); // 列号从1开始显示更直观 } }
代码说明
- 把
sumrow和sumcol改成void类型,因为我们只需要它们打印结果,不需要返回求和值(如果需要返回,再改回int并调整return逻辑即可) - 修正了循环的嵌套顺序和范围,确保每行/每列的求和逻辑正确
- 函数调用时直接传入整个二维数组,不再出现越界和赋值错误
- 打印时把行/列号从1开始显示,更符合日常阅读习惯
内容的提问来源于stack exchange,提问作者SueRulz
相关产品推荐
相关产品推荐

