使用不打印值的int函数从数组中返回最大数

Returning largest number from an array using an int function not printing value

我正在尝试创建一个小程序来接收数组和 returns 数组中的最大数字。我能够使用带有初始值设定项“void”的函数创建程序,但不明白为什么我不能使用“int”对不同的函数执行相同的操作。

我在使用函数 int largestNum(int *length,int numberArr[]) 时收到错误“不兼容的指针类型从结果类型为 'int *' 的函数返回 'int *(int *, int *)'”。任何解释表示赞赏。

输入:
元素 0 - 23
元素 1 - 12
元素 2 - 34

输出:34

使用 void 的函数:

void largestNum(int *length,int numberArr[]){

 int largestNumber = numberArr[0];

 for(int x = 1;x < *length;x++){
   if (numberArr[x] > largestNumber)
   largestNumber = numberArr[x];
  }
  printf("%d", largestNumber);
 }


int main(){

 int numbersArr[100];
 int input;
 int num;
 int count = 0;
 
 printf("Input total number of elements (1-100): ");
 scanf("%d", &num);

 for(int x = 0; x < num; x++){
   printf("Element %d - ", count);
   scanf("%d", numbersArr + x);
   count++;
 }


 largestNum(&count, numbersArr);

 return 0;
 }

使用整数的函数:

int largestNum(int *length,int numberArr[]){

 int largestNumber = numberArr[0];

 for(int x = 1;x < *length;x++){
   if (numberArr[x] > largestNumber)
   largestNumber = numberArr[x];
 }
 return largestNumber;
} 


int main(){

 int numbersArr[100];
 int input;
 int num;
 int count = 0;

 printf("Input total number of elements (1-100): ");
 scanf("%d", &num);

 for(int x = 0; x < num; x++){
   printf("Element %d - ", count);
   scanf("%d", numbersArr + x);
   count++;
 }


  largestNum(&count, numbersArr);

  printf(largestNum);

 return 0;
 }

您需要将值保存在变量中,例如:

a = largestNum(&count, numberArr);
printf("%d", a);

或者你可以调用printf中的函数

printf("%d", largestNum(&count, numberArr))

largestNum 是一个声明为

的函数
int largestNum(int *length,int numberArr[]);

所以在这次通话中

printf(largestNum);

函数指示符被隐式转换为类型 int( int *, int * ) 的指针,但函数 printf 需要类型 char * 的第一个参数。那就是上面调用 printf 没有意义。您需要输出函数的返回值。例如

printf("%d\n", largestNum(&count, numbersArr) );

注意一般功能不正确。当表达式 *length 的值等于 0.

时,它可以调用未定义的行为

同样,通过引用传递第一个参数也没有什么意义。 由于数组在函数中没有被改变,所以它应该用限定符 const 声明。

函数可以通过以下方式声明和定义

size_t largestNum( const int numberArr[], size_t n )
{
    size_t largestNumber = 0;

    for ( size_t i = 1; i < n; i++ )
    {
        if ( numberArr[largestNumber] < numberArr[i] )
        {
            largestNumber = i;
        }
    }
    
    return largestNumber;
} 

而且函数可以这样调用

size_t pos = largestNum( numbersArr, count );
printf("%d\n", numbersArr[pos] );

要在第二个参数指定为 0 时检查错误,您可以编写

size_t pos = largestNum( numbersArr, count );
if ( pos != count ) printf("%d\n", numbersArr[pos] );