函数返回指针:c ++中的最大值

时间:2014-11-21 11:55:15

标签: c++

enter image description here

我做了那个任务,但它转向了我一个巨大的数字而不是最大的

我的代码是

    #include <iostream>
    using namespace std;
    int* max(int p[],int n);
   int main (){
     int n;
     int*A=new int;


int *p;

cout<<"enter the value of array";
cin>>n;
p=new int[n];
for(int i=0;i<n;i++){
cout<<"enter the element";
cin>>p[n];
}
A=(max(p,n));
cout<<"the maximum is"<<*A;
return 0;

}
int* max(int p[],int n)
{
   int maximum;
   maximum = p[0];
   for(int x=0;x<n;x++)
   {
       if(p[x]>maximum)
       {
           maximum=p[x];
           return &maximum;
       }
   }

   return  &maximum;
}

1 个答案:

答案 0 :(得分:0)

函数的正确定义可以采用以下方式

int * max( int a[], size_t n )
{
    int *maximum = a;

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

    return maximum;
}

或者

int * max( int a[], size_t n )
{
    int *maximum = a;

    if ( n != 0 )
    {
        for ( int *p = a + 1; p != a + n; ++p )
        {
            if ( *maximum < *p ) maximum = p;
        }
    }

    return maximum;
}

至于你的函数定义,然后你返回一个指向一个局部变量的指针,一般情况下退出函数后会被销毁。所以程序有不确定的行为。

考虑到分配内存没有任何意义

int*A=new int;

您将收到内存泄漏。

简单定义

int *A;

此外,您应该知道标题std::max_element中声明的标准算法<algorithm>执行相同的任务。

例如你可以写

#include <algorithm>

//..

A = std::max_element( p, p + n );