我不断收到错误消息
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;
}
答案 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)
%d
格式说明符需要一个int参数。int
并接受int *, int, int
类型的参数即使您的get_max()
函数也存在严重缺陷:
0
到b - a
而不是从a
到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;
}
答案 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),
在那里的逗号是什么?