如何从索引a到索引b获取数组的最大元素?

时间:2018-08-12 06:32:44

标签: c

我不断收到错误消息

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;
}

3 个答案:

答案 0 :(得分:5)

您的基本问题是您将函数指针传递给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()函数也存在严重缺陷:

  • 它检查从0b - a而不是从ab的元素,
  • 它修改数组;如果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;
}

答案 1 :(得分:0)

在行中:

get_max(array,0,2),
printf("MAX: %d", get_max);

get_max()函数从数组中返回最大值,并且您不在任何地方存储值。您必须存储该值,然后才能打印出来。

max = get_max(array,0,2);
printf("MAX: %d", max);

格式错误:

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

是由于get_max是一个函数指针,而%d需要一个整数。

答案 2 :(得分:0)

printf("MAX: %d", get_max);的输出是垃圾值,因为get_max不是变量而是函数,因此,仅以格式字符串传递声明为int的函数名称。要获得get_max()函数的返回值,最好编写正确的调用语法printf("MAX: %d", get_max(array, 0, 2);,它将为您提供具有给定参数的get_max()函数的返回值。

注意 1 修正拼写错误get_max(array,0,2),在那里的逗号是什么?