c - 如何从索引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;
}
解决方案
您的基本问题是您将函数指针传递给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
0
tob - a
而不是 froma
tob
, - 它修改数组;如果
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;
}
推荐阅读
- javascript - 我想要我点击的笔记的标题,而不是列表的第一个笔记
- r - R按数据框中的列计算向量中的行
- javascript - React + Firestore:从查询中返回一个变量
- php - 带有 PDO 查询的 SQL 表中的项目
- c++ - 从 C++ 中的二进制文件中读取不同字节序的整数
- c# - 如何在 PowerBuilder 12.5 中传递 .net dll 的委托参数
- drupal - 使用赛普拉斯以编程方式在 Drupal 8 上以管理员用户身份登录
- sql - 需要根据 SQL 中的 Number 列来乘行
- typescript - 如何为 EventEmitter 等类的事件有效负载分配 TypeScript 类型?
- javascript - 使用移动设备的触摸事件模拟拖放事件