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

C语言使用指针与函数求二维数组每列最大值代码错误排查

代码问题定位与修正

核心错误点

  • 遍历逻辑错误:C语言二维数组采用行优先存储,你当前代码中ptr每次自增1,内层循环遍历完一整行元素才结束,实际计算的是每行的最大值,和需求的每列最大值完全不符。按列遍历时,同一列相邻元素的地址间隔为总列数k,对应第j列第i行的元素地址为ptr + j + i*k。
  • 最大值初始值错误:你将最大值变量y初始化为0,当矩阵存在负数元素时,计算结果会完全错误,正确做法是将y初始化为当前列的第一个元素值。

修正后代码

#include <stdio.h>
void MAX(int *ptr, int b, int k)
{
    int i, j, y;
    for (j = 0; j < k; j++)
    {
        // 初始化最大值为当前列第一个元素
        y = *(ptr + j);
        for (i = 1; i < b; i++)
        {
            // 按列取元素:每次跳过k个位置(一整行)
            int *curr_ptr = ptr + j + i * k;
            if (y < *curr_ptr)
            {
                y = *curr_ptr;
            }
        }
        printf("%d ", y);
    }
}
int main()
{
    int b, k;
    scanf("%d %d", &b, &k);
    int arr[b][k];

    for (int i = 0; i < b; i++)
    {
        for (int j = 0; j < k; j++)
        {
            scanf("%d", &arr[i][j]);
        }
    }
    MAX(&arr[0][0], b, k);
    return 0;
}

验证说明

用你给出的输入示例测试,修正后代码会依次遍历每一列:

  • 第1列元素为1、8、1、9,最大值9
  • 第2列元素为3、4、2、8,最大值8
  • 第3列元素为2、3、3、7,最大值7
  • 第4列元素为1、2、4、6,最大值6
    最终输出9 8 7 6,符合预期结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 07:54:05