C 函数返回指向数组中最大数字的指针

C 函数返回指向数组中最大数字的指针,c,arrays,function,pointers,C,Arrays,Function,Pointers,从标题可以看出,我需要编写一个函数,返回一个指向数组中最大数字的指针,函数得到一个指向双精度数组的指针及其大小。此外,我需要编写一个主函数来使用这个函数。 以下是我编写的代码: #include <stdio.h> #include <stdlib.h> void BigEl(double* arr, double arrSize); void BigEl(double* arr, double arrSize) { int i; double max

从标题可以看出,我需要编写一个函数,返回一个指向数组中最大数字的指针,函数得到一个指向双精度数组的指针及其大小。此外,我需要编写一个主函数来使用这个函数。 以下是我编写的代码:

#include <stdio.h>
#include <stdlib.h>
void BigEl(double* arr, double arrSize);

void BigEl(double* arr, double arrSize)
{
    int i;
    double  maximum, *x;
    maximum = arr[0];
    for (i = 1; i < arrSize; i++)
    {
        if (arr[i]>maximum)
        {
            maximum = arr[i];
        }
    }
    *x = maximum;
}
void main()
{
    double myarr[10];
    int i;
    printf("Please insert 10 numbers to the array\n");
    for (i = 0; i < 10; i++)
    {
        scanf("%d", &myarr[i]);
    }
    BigEl(myarr, 10);


}
我不明白我做错了什么,因为我初始化了x。
感谢您提供的任何帮助。此外,请告诉我代码的想法是否正确,因为我不确定我是否正确理解了问题。

您没有初始化变量x。您只需将x指向的位置写到

当x未初始化时,这正是编译器所抱怨的

你想要的是:

double *
BigEl(double* arr, size_t arrSize)
{
    size_t i;
    double *max = arr;
    for (i = 1; i < arrSize; i++)
        if (arr[i] > *max)
            max = &arr[i];
    return max;
}
我改变的事情:

对数组大小和计数器使用size\u t,而不是double和int。 保留指向最大元素的指针,而不是最大元素的值。 返回指向最大元素的指针。 拆下superflous支架。
你什么也不退。另外,最好考虑数组大小为0的情况。此外,大小应作为常量传递。没有其他答案提到这一点

double* BigEl(double* arr, const size_t iSize)
{
    if(iSize == 0)
        return 0;

    double max = arr[0], *x = &arr[0];
    for(unsigned int i=1;i<iSize;++i){
        if(arr[i] > max){
            max = arr[i];
            x = &arr[i];
        }
    }
    return x;
}
您对*x的赋值不正确-您说的是“分配到x指向的位置”,而没有先说明该位置。除此之外,还有几个其他问题:

#include <stdio.h>
#include <stdlib.h>

// return pointer to location from function
double * BigEl(double* arr, double arrSize)
{
    int i;
    // initialise both variables
    double maximum = arr[0], *max_pos = arr;

    for (i = 1; i < arrSize; i++)
    {
        if (arr[i]>maximum)
    {
        maximum = arr[i];
        // assign address here
        max_pos = &arr[i];
        }
    }
    // return address
    return max_pos;
}

int main()
{
    double myarr[10];
    double * max_pos;
    int i;
    printf("Please insert 10 numbers to the array\n");
    for (i = 0; i < 10; i++)
    {
        scanf("%lf", &myarr[i]);
    }
    // use return value here
    max_pos = BigEl(myarr, 10);

    return 0;
}
我需要写一个函数,返回一个指向最大值的指针 数组中的数字

我想你需要以下几点

#include <stdio.h>

double * largest_element( const double *a, int n )
{
    const double *largest = a;
    int i;

    for ( i = 1; i < n; i++ )
    {
        if ( *largest < a[i] ) largest = a + i;
    }

    return ( double *)largest;

}

#define N   10

int main(void) 
{
    double a[N];
    int i;

    printf("Please insert %d numbers to the array: ", N );

    for ( i = 0; i < N; i++ )
    {
        scanf( "%lf", &a[i] );
    }

    printf( "\nThe largest element of the array is %lf\n", *largest_element( a, N ) );

    return 0;
}
然后程序输出将是

The largest element of the array is 7.700000

您没有从函数返回任何内容。@haccks虽然为true,但这并不是生成编译器错误的原因,编译器错误是OP的问题。顺便说一句%dint@abligh; 我没那么说。我的评论是对标题的回应。OT:至少是int mainvoid。为了完整性,应该提到,对于数组索引,类型size\u t是首选。您的代码对于负数的大小仍然会失败。@Amnon Hanuhov您是什么意思?!我输入4个数字,它完成扫描,假设扫描10次,但是如果我输入整数,它会扫描10次。再加上它打印了一个奇怪的数字。没关系,我犯了一个我没有注意到的小错误。
#include <stdio.h>
#include <stdlib.h>

// return pointer to location from function
double * BigEl(double* arr, double arrSize)
{
    int i;
    // initialise both variables
    double maximum = arr[0], *max_pos = arr;

    for (i = 1; i < arrSize; i++)
    {
        if (arr[i]>maximum)
    {
        maximum = arr[i];
        // assign address here
        max_pos = &arr[i];
        }
    }
    // return address
    return max_pos;
}

int main()
{
    double myarr[10];
    double * max_pos;
    int i;
    printf("Please insert 10 numbers to the array\n");
    for (i = 0; i < 10; i++)
    {
        scanf("%lf", &myarr[i]);
    }
    // use return value here
    max_pos = BigEl(myarr, 10);

    return 0;
}
#include <stdio.h>

double * largest_element( const double *a, int n )
{
    const double *largest = a;
    int i;

    for ( i = 1; i < n; i++ )
    {
        if ( *largest < a[i] ) largest = a + i;
    }

    return ( double *)largest;

}

#define N   10

int main(void) 
{
    double a[N];
    int i;

    printf("Please insert %d numbers to the array: ", N );

    for ( i = 0; i < N; i++ )
    {
        scanf( "%lf", &a[i] );
    }

    printf( "\nThe largest element of the array is %lf\n", *largest_element( a, N ) );

    return 0;
}
2.2 1.5 5.2 1.8 3.9 5.9 7.7 6.8 2.9 0.8
The largest element of the array is 7.700000