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

二维数组行列求和函数报错求助:无法修改数据类型

解决二维数组行/列求和的函数调用与类型错误

咱们来一步步拆解你代码里的问题,然后逐一修复:

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 07:52:43