首页 > 解决方案 > 如何从索引a到索引b获取数组的最大元素?

问题描述

我不断收到错误

format specifies type 'int' but the argument has type 'int (*)(int *, int, int)'.
printf("%d", get_max);

我是指针和 C 编码的新手,但还没有完全掌握这门语言。我希望您能耐心地帮助我修复我的代码,并让我理解为什么会出现这样的错误。

#include <stdio.h>

//get maximum element of array from index a to index b, inclusive

int get_max(int *array, int a, int b);


int get_max(int *array, int a, int b)
{
    int max;

    for (int j=0; j<=(b-a); j++) {

        array[j] = *(array+j+a);

        if(array[j] > array[j+1])
           max = array[j]; 
    }   

    return max;
}


int main() {

    int array[] = {1,4,-1,2,5};
    int *arr;
    int i;
    arr = array;

    printf(" PRINT ARRAY \n");

       for ( i = 0; i < 5; i++ ) {

          arr[i] = *(arr + i);

          printf("%d  ",arr[i]);
       }

    get_max(array,0,2),

    printf("MAX: %d", get_max);

    return 0;
}

标签: c

解决方案


您的基本问题是您将函数指针传递给printf而不是函数返回值:

你有:

get_max(array,0,2),

printf("MAX: %d", get_max);

当你需要类似的东西时:

int max = get_max(array, 0, 2 );

printf( "MAX: %d", max ) ;

在您的通话中使用逗号运算符而不是分号语句终止符get_max()大概也是一个错字?

解释诊断:

format specifies type 'int' but the argument has type 'int (*)(int *, int, int)'.
                        ^                               ^
                       (1)                             (2)
  • (1)%d格式说明符需要一个 int 参数。
  • (2)您传递了一个指向函数的指针,该函数返回int并接受类型参数int *, int, int

即使这样,您的get_max()功能也存在严重缺陷:

  • 它检查元素 from 0tob - a而不是 from ato b,
  • 它修改数组;如果a大于零,则不是无害的自赋值。
  • 如果a为零并且array[a]是最大值,max则未分配。

考虑:

int get_max( const int* array, int a, int b )
{
    int max = array[a] ;

    for( int i = a + 1; i < b; i++ ) 
    {
        if( array[i] > max )
        {
            max = array[i] ;
        } 
    }   

    return max;
}

推荐阅读