C 如何从索引a到索引b获取数组的最大元素?
我一直在犯错误 一般来说,我对指针和C代码还不熟悉,但还没有完全掌握这门语言。我希望您能耐心地帮助我修复代码,并让我了解出现此类错误的原因C 如何从索引a到索引b获取数组的最大元素?,c,C,我一直在犯错误 一般来说,我对指针和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) { in
#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;
}
#包括
//获取从索引a到索引b的数组的最大元素,包括
int get_max(int*数组,int a,int b);
int get_max(int*数组,int a,int b)
{
int max;
对于(int j=0;j数组[j+1])
max=数组[j];
}
返回最大值;
}
int main(){
int数组[]={1,4,-1,2,5};
int*arr;
int i;
arr=阵列;
printf(“打印数组\n”);
对于(i=0;i<5;i++){
arr[i]=*(arr+i);
printf(“%d”,arr[i]);
}
获取_max(数组,0,2),
printf(“最大值:%d”,获取最大值);
返回0;
}
您的基本问题是将函数指针传递给printf
而不是函数返回值:
你有:
get_max(array,0,2),
printf("MAX: %d", get_max);
当您需要以下内容时:
int max = get_max(array, 0, 2 );
printf( "MAX: %d", max ) ;
在get\u max()
调用中使用逗号运算符而不是分号语句终止符可能也是一个打字错误
要解释诊断,请执行以下操作:
format specifies type 'int' but the argument has type 'int (*)(int *, int, int)'.
^ ^
(1) (2)
- (1)
格式说明符需要一个int参数%d
- (2) 您传递了一个指向返回
并接受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;
}
int get_max(常量int*数组,int a,int b)
{
int max=数组[a];
对于(int i=a+1;imax)
{
max=数组[i];
}
}
返回最大值;
}
您的基本问题是将函数指针传递给printf
而不是函数返回值:
你有:
get_max(array,0,2),
printf("MAX: %d", get_max);
当您需要以下内容时:
int max = get_max(array, 0, 2 );
printf( "MAX: %d", max ) ;
在get\u max()
调用中使用逗号运算符而不是分号语句终止符可能也是一个打字错误
要解释诊断,请执行以下操作:
format specifies type 'int' but the argument has type 'int (*)(int *, int, int)'.
^ ^
(1) (2)
- (1)
格式说明符需要一个int参数%d
- (2) 您传递了一个指向返回
并接受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;
}
int get_max(常量int*数组,int a,int b)
{
int max=数组[a];
对于(int i=a+1;imax)
{
max=数组[i];
}
}
返回最大值;
}
行中:
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
需要一个整数 行中:
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
需要一个整数 printf的输出(“MAX:%d”,get_MAX)是一个垃圾值,因为get_max
不是一个变量,而是一个函数,所以在字符串格式中只传递声明为int
的函数名。要获取函数的返回值,最好编写正确的调用语法,即printf(“max:%d”,get_max(array,0,2);
,它将为您提供带有给定参数的get_max()函数的返回值
注意
1修复打字错误get\u max(数组,0,2),
逗号在那里做什么?printf的输出(“max:%d”,get\u max)是一个垃圾值,因为get_max
不是一个变量,而是一个函数,所以在字符串格式中只传递声明为int
的函数名。要获取get_max()
函数的返回值,最好编写正确的调用语法,即printf(“max:%d”,get_max(数组,0,2)
这将为您提供带有给定参数的get_max()函数的返回值
注意
1修复键入错误
get\u max(数组,0,2),
逗号在那里做什么?打印前调用get\u max
,然后尝试打印函数指针。您可能需要get\u max(数组,0,2)
在printf
中-这就是错误所在。当您在printf
调用中只编写get_max
时,您将指向get_max
函数的指针传递给printf()
,并且无法使用%d
格式打印函数指针。符号int(*)(int*,int,int)
是函数指针的最小表示法,用于强制转换(以及一些编译器错误消息)。为什么要在打印循环中编写自赋值arr[i]=*(arr+i);
?它没有任何用处。请注意