【问题标题】:Function to return a pointer to the largest number in an array返回指向数组中最大数的指针的函数
【发布时间】:2015-03-28 13:19:22
【问题描述】:

正如标题所示,我需要编写一个函数,该函数返回一个指向数组中最大数的指针,这些函数获取一个指向双精度数组的指针及其大小。此外,我需要编写一个将使用此函数的主函数。 这是我写的代码:

#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。 任何形式的帮助表示赞赏,此外,请告诉我我的代码的想法是否正确,因为我不确定我是否正确理解了这个问题。

【问题讨论】:

  • 你没有从函数返回任何东西。
  • @hacks 虽然是真的,但这不是产生编译器错误的原因(这是 OP 的问题)。
  • 顺便说一句 "%d"int
  • @abligh;我没这么说。我的评论是对标题的回应。
  • OT:至少是int main(void)

标签: c arrays function pointers


【解决方案1】:

您没有初始化变量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. 移除多余的牙套。

【讨论】:

    【解决方案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;
    }
    

    【讨论】:

    • 为了完整起见,应该提到对于数组索引,size_t 是首选类型。对于负“尺寸”,您的代码仍然会失败。
    【解决方案3】:

    您对*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;
    }
    

    【讨论】:

      【解决方案4】:
      //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;    
      }
      

      【讨论】:

        【解决方案5】:

        我需要编写一个返回一个指针指向最大的函数 数组中的数字

        我认为你需要以下内容

        #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
        

        【讨论】:

        • @Amnon Hanuhov 你什么意思?!
        • 我输入了 4 个数字并完成扫描,假设扫描 10 次,但是如果我输入整数,它会扫描 10 次。加上它打印一个奇怪的数字。
        • 没关系,我犯了一个我没有注意到的小错误。
        猜你喜欢
        • 2011-01-12
        • 1970-01-01
        • 2021-06-25
        • 1970-01-01
        • 2013-04-10
        • 2013-07-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多