为什么将 4 元素数组传递给 C 中的函数时会出现警告?

New*_*mer 0 c arrays arguments function function-call

如果有一个大小为 4 的数组,则将该数组的值发送给函数。为什么会出现警告?

#include <stdio.h>
#include <stdbool.h>

void greatestOf(int arr[], int *result) {
    *result = arr[0];

    for (int i = 1; i < 4; i++) {
        if (arr[i] > *result) {
            *result = arr[i];
        }
    }
}


int main() {
    int arr[4], x;
    printf("Input : ");
    scanf("%d %d %d %d", &arr[0], &arr[1], &arr[2], &arr[3]);

    greatestOf(arr[4], &x); // here warning text. When I try to use '''greatest(arr, &x)'''

    printf("Greatest number: %d\n", x);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我收到以下警告消息:

#include <stdio.h>
#include <stdbool.h>

void greatestOf(int arr[], int *result) {
    *result = arr[0];

    for (int i = 1; i < 4; i++) {
        if (arr[i] > *result) {
            *result = arr[i];
        }
    }
}


int main() {
    int arr[4], x;
    printf("Input : ");
    scanf("%d %d %d %d", &arr[0], &arr[1], &arr[2], &arr[3]);

    greatestOf(arr[4], &x); // here warning text. When I try to use '''greatest(arr, &x)'''

    printf("Greatest number: %d\n", x);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我希望警告文本消失,我想如果想向函数发送值,我必须包含数组的大小。因为我想发送整个值

Mic*_* M. 6

在函数调用中,arr[4]是一个表示 的第五个元素的表达式arr,而不是您告诉函数它的arr长度是四个元素。相反,你只需通过arr。然而,这就留下了一个问题:greatestOf如何判断到底有多长arr

在这种情况下,您知道传递给的数组始终是四个元素长,因此您只需更改togreatestOf的签名即可greatestof

void greatestOf(int arr[4], int *result) 
Run Code Online (Sandbox Code Playgroud)

这里,int arr[4]是一个类型,而不是一个表达式,表示一个长度为 4、名称为 的数组arr

如果您不知道有多长arr,那么您必须将其长度作为单独的参数传递,如下所示:

void greatestOf(int arr[], int arr_length, int *result) {
    *result = arr[0];

    for (int i = 1; i < arr_length; i++) {
        if (arr[i] > *result) {
            *result = arr[i];
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

然后像这样调用它:

greatestOf(arr, 4, &x);
Run Code Online (Sandbox Code Playgroud)