Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何从索引a到索引b获取数组的最大元素?_C - Fatal编程技术网

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

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

我一直在犯错误

一般来说,我对指针和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;
}
#包括
//获取从索引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)
    %d
    格式说明符需要一个int参数
  • (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)
    %d
    格式说明符需要一个int参数
  • (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);
?它没有任何用处。请注意