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)
我希望警告文本消失,我想如果想向函数发送值,我必须包含数组的大小。因为我想发送整个值
在函数调用中,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)