我做了那个任务,但它转向了我一个巨大的数字而不是最大的
我的代码是
#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;
}
答案 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 );