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

时间:2015-03-28 13:19:22

标签: c arrays function pointers

正如您可以通过标题告诉我需要编写一个返回指向数组中最大数字的指针的函数,函数获取一个指向double数组及其大小的指针。另外我需要编写一个将使用此函数的main函数。 这是我写的代码:

#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);


}

我收到此错误:

Error   1   error C4700: uninitialized local variable 'x' used

我不明白我做错了什么因为我做了初始化x。 任何形式的帮助都表示赞赏,此外,请告诉我我的代码是否正确,因为我不确定我是否正确理解了这个问题。

5 个答案:

答案 0 :(得分:4)

您没有初始化变量x。您只需写到x指向的位置,此处:

    *x = maximum;

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;
}

我改变的事情:

  1. 使用size_t表示数组大小和计数器,而不是doubleint
  2. 保留指向最大元素的指针,而不是最大元素的值。
  3. 将指针返回到最大元素。
  4. 删除超级大括号。

答案 1 :(得分:2)

你没有归还任何东西。此外,考虑数组大小为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;
}

答案 2 :(得分:1)

//function that returns a pointer to the largest number
double *BigEl(double* arr, int arrSize)
{
    int i;
    double  *maximum;
    maximum = &arr[0];
    for (i = 1; i < arrSize; i++)
    {
        if (arr[i] > *maximum)
        {
            maximum = &arr[i];
        }
    }
    return maximum;
}
int main(void)
{
    double myarr[10];
    int i;
    printf("Please insert 10 numbers to the array\n");
    for (i = 0; i < 10; i++)
    {
        scanf("%lf", &myarr[i]);
    }
    printf("%f\n", *BigEl(myarr, 10));

    return 0;    
}

答案 3 :(得分:1)

您对*x的作业不正确 - 您说的是{&#34;指定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;
}

答案 4 :(得分: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