在修正代码之前,我注意到代码中的一些问题:

  1. fun 函数中,使用 *p != '\0' 作为循环终止条件是不正确的。因为这里的数组是整型数组,不会以 '\0' 结束。
  2. fun 函数中,对指针 p 进行自增操作时应该写作 p++,而不是 *p++
  3. fun 函数中,在交换两个元素的位置时,使用的下标 1 是不正确的。应使用 col 表示列数。

以下是经过修正的代码:

#include <stdio.h>

void fun(int line, int col, int arr[][col]) {
    int *p = &arr[0][0];
    for (int i = 0; i < line * col - 1; i++) {
        for (int j = 0; j < line * col - i - 1; j++) {
            if (*(p + j) > *(p + j + 1)) {
                int t = *(p + j);
                *(p + j) = *(p + j + 1);
                *(p + j + 1) = t;
            }
        }
    }
    printf("最大值为:%d\n", *(p + line * col - 1));
}

int main(int argc, const char *argv[]) {
    int arr[2][4];
    for (int i = 0; i < 2; i++) {
        for (int j = 0; j < 4; j++) {
            scanf("%d", &arr[i][j]);
        }
    }
    fun(2, 4, arr);
    return 0;
}

在修正后的代码中:

  • 第 10-17 行使用冒泡排序的思想对二维数组进行排序,将最大值移动到最后。
  • 第 20 行通过 *(p + line * col - 1) 来输出排序后的最大值。

现在,代码应该能够正确地接收输入的二维数组,并在函数 fun 中找到并输出最大值。请注意,在输入数组时,请确保输入数值的个数与数组大小相匹配,以避免访问越界错误。如果还有其他问题,请随时提问。

C语言二维数组排序和查找最大值代码优化解析

原文地址: https://www.cveoy.top/t/topic/RJk 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录