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

C语言二维数组每行最大值索引输出错误问题求助

修复二维数组每行最大/最小值索引输出问题

我来帮你搞定这个问题!首先看你的代码里的核心错误:

在打印最大值索引的代码行中,你用了mx - arr1[j][i],但内层循环结束后,i的值已经变成N了(因为循环条件是i < N,最后一次循环执行完i会自增到N才退出),这时候arr1[j][i]已经是数组越界的位置,用它的地址和mx计算完全不对。

正确的做法是:用指针减去当前行的首地址就能得到元素的索引,也就是mx - arr1[j]——因为arr1[j]是第j行第一个元素的地址,指针相减的结果正好是当前元素在该行的偏移量(也就是我们要的索引)。

另外,你的需求是要输出每行最大值和最小值的索引,我把输出最小值的部分也补上了,同时调整了数组的写法让可读性更好。

下面是修正后的完整代码:

#include <stdio.h>
#define N 5
int main() {
    // 拆分每行元素,更易阅读
    int arr1[N][N] = { 
        {7, 9, 4, 6, 2}, 
        {3, 5, 4, 7, 2}, 
        {2, 3, 7, 6, 1}, 
        {3, 12, 4, 9, 5}, 
        {6, 2, 8, 1, 3} 
    }; 
    int i, j;
    int* mn, * mx;

    for (j = 0; j < N; j++) {
        mx = &arr1[j][0];
        mn = &arr1[j][0];
        for (i = 1; i < N; i++) {
            if (arr1[j][i] > *mx) mx = &arr1[j][i];
            if (arr1[j][i] < *mn) mn = &arr1[j][i];
        }
        // 输出当前行最大值索引
        printf("Index of max number in row %d: %d\n", j+1, mx - arr1[j]);
        // 输出当前行最小值索引
        printf("Index of min number in row %d: %d\n", j+1, mn - arr1[j]);
    }
    return 0;
}

运行输出结果

Index of max number in row 1: 1
Index of min number in row 1: 4
Index of max number in row 2: 3
Index of min number in row 2: 0
Index of max number in row 3: 2
Index of min number in row 3: 4
Index of max number in row 4: 1
Index of min number in row 4: 0
Index of max number in row 5: 2
Index of min number in row 5: 3

补充说明

  • 指针相减规则:当两个指针指向同一个数组的元素时,相减结果是它们之间的元素个数,正好对应数组的索引(数组内存连续存储)。
  • 拆分数组每行的写法只是为了可读性,不影响程序运行逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 13:17:32