首页 > 解决方案 > 如何在函数 max_2d 中修复此参数?从 const int 到 int 的转换是错误

问题描述

我试图在多维数组中找到最大的数字,但 Visual Studio 在成功编译代码时遇到问题。

当我使用参数作为循环的int限制时,它的转换存在问题。它无法从循环与参数进行比较。任何人都可以帮忙吗?const int *sizeforint iforsize

这是错误列表:https ://imgur.com/a/HcNqgmx

int max_2d(const int size[], int array[][size]) {

    if (array == NULL) return -1;

    int max = array[0][0];

    for (int i = 0; i < size; i++) {
        for (int j = 0; j < size; j++) {
            if (max < array[i][j]) max = array[i][j];
        }
    }

    return max;
}

int main() {

    int array[2][2] = { {1,2},{0,-3} };
    printf("%d\n", max_2d(2, array));

    return 0;
}

在这种状态下,我期望输出返回最大值(其中最大值是最大数)= 2。

标签: carraysparameters

解决方案


函数的第一个参数const int size,应该是一个数字而不是一个数组,所以它应该被声明为const int sizearr[][]此外,此代码将起作用,但它在逻辑上不正确,因为应该知道数组 ( ) 的第二个索引,但在这里您将其传递为arr[][size]. 这是一个静态内存分配。编译器应该知道在编译时声明的所有变量的大小。


推荐阅读