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

C语言4×5转5×4矩阵转置输出异常问题排查

解决4×5矩阵转置时最后一行结果错误的问题

嘿,这个问题我之前也踩过一模一样的坑!核心原因就是你忽略了C语言数组的下标是从0开始的,你的循环从1开始遍历,直接导致了数组越界访问,最后一行的异常值其实是未初始化的内存垃圾数据。

咱们一步步拆解问题:

  • 你的原矩阵original[4][5],合法的行下标是0~3(共4行),列下标是0~4(共5列);转置后的transpose[5][4],合法行下标是0~4(5行),列下标是0~3(4列)。
  • 你原来的循环用ROW = 1; ROW <=4,当ROW=4时,已经超出了原矩阵的行范围,访问的是数组之外的内存;同理COL=5也超出了列范围。这些越界访问的位置值是随机的,所以最后一行出现了1251这种奇怪的数。
  • 打印循环里的row<6(也就是遍历15)和`col<5`(14)也同样越界,没正确遍历转置后的数组。

给你修正后的完整代码:

修正后的转置函数

int MATRANS(int original[4][5], int transpose[5][4]) {
    int ROW, COL;
    // 从0开始遍历原矩阵的4行(0到3)
    for (ROW = 0; ROW < 4; ROW++) {
        // 从0开始遍历原矩阵的5列(0到4)
        for (COL = 0; COL < 5; COL++) {
            // 正确映射转置关系:原矩阵[行][列] → 转置矩阵[列][行]
            transpose[COL][ROW] = original[ROW][COL];
        }
    }
    // 补充返回值,符合函数声明的int类型
    return 0;
}

修正后的打印代码

printf("Transposed Matrix:\n");
// 遍历转置矩阵的5行(0到4)
for (int row = 0; row < 5; row++) {
    // 遍历转置矩阵的4列(0到3)
    for (int col = 0; col < 4; col++) {
        // 这里要确保变量名和你定义的转置数组一致,原代码的matrixZ改成transpose即可
        printf("%d ", transpose[row][col]);
    }
    printf("\n");
}

几个额外的小提醒:

  1. 一定要记住C数组的下标从0开始,这是新手最容易犯的错误之一;
  2. 原函数MATRANS声明了返回int但没有返回值,补充return 0让代码更规范;
  3. 打印时要保证变量名和转置后的数组一致,避免出现未定义的变量问题。

这样修改后,当你输入全为1的矩阵时,输出就会是你预期的5行全1的结果啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 06:32:50