为啥 C 中将数组及其大小作为参数的函数会出错? [关闭]

Posted

技术标签:

【中文标题】为啥 C 中将数组及其大小作为参数的函数会出错? [关闭]【英文标题】:Why is there an error with a function in C that takes an Array and its size as parameters? [closed]为什么 C 中将数组及其大小作为参数的函数会出错? [关闭] 【发布时间】:2022-01-18 06:30:59 【问题描述】:

该函数应该接受一个数组并返回其中的最大值。


int findMaxValue(int listName[], int listSize)

    int largestVal = listName[0];
    for (int index = 0; index < listSize; ++index)
        if(listName[index] > largestVal)
            largestVal = listName[index];
            //printf ("%d\n", largestVal);
        
    
    //printf ("%d\n", largestVal); it wouldn't even give any output
    return largestVal; 
 


int main

    int theArray = 3, 6, 7, 8, 7, 9, 3, 4, 8;

    int sizeArr = (sizeof(theArray) / sizeof(int));

    findMaxValue(theArray, sizeArr);


我看到数组在传递时会变成一个指针,但是编译器想要什么?我遇到了错误:

prog4TSR.c:75:42: note: (near initialization for 'theArray')
prog4TSR.c:75:45: warning: excess elements in scalar initializer
     int theArray = 3, 6, 7, 8, 7, 9, 3, 4, 8;
                                             ^
prog4TSR.c:75:45: note: (near initialization for 'theArray')

prog4TSR.c:78:18: warning: passing argument 1 of 'findMaxValue' makes pointer from integer without a cast [-Wint-conversion]
     findMaxValue(theArray, sizeArr);
                  ^~~~~~~~
prog4TSR.c:6:5: note: expected 'int *' but argument is of type 'int'
 int findMaxValue(int listName[], int listSize)

【问题讨论】:

int theArray[] = 3, 6, 7, 8, 7, 9, 3, 4, 8; int theArray 不是数组,它是单个 int。 int theArray[] = ... ; 是一个数组。一旦你解决了其他问题应该消失。 小问题。在访问findMaxValue 中的数组之前检查大小,以防万一它为空,并且由于您正在获取第一个值,因此您可以在索引 1 而不是 0 处开始循环。 【参考方案1】:
int theArray[] =  . . . . 

int theArray 是错误的声明数组的正确语法是我上面提到的。如果您进行了更改,那么它将被修复。

【讨论】:

以上是关于为啥 C 中将数组及其大小作为参数的函数会出错? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如果我尝试在不同的公共类中将数组作为参数传递,为啥我的构造函数无法在 Java 中编译?

在 C 中将多维数组作为参数传递

如何在C中将函数指针数组的函数指针作为函数参数传递?

C语言中,数组名作为函数参数,属于啥传递,为啥?

为啥指针不能传递正确的值(C)?

在 C/C++ 中将数组作为形式参数传递为 int arr[] 和 int arr[N] 之间的区别