2014-11-21 119 views
-3

enter image description here函数返回指针:在C++中

最大值我做了任务,但它变成我一个庞大的数字不是最大

我的代码是

#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

是否有您需要使用图片代替粘贴文本的具体原因是什么?此外,您的缩进也被拍摄... – Deduplicator 2014-11-21 11:57:54

+0

请正确格式化您的代码 - 目前它几乎不可读。 – 2014-11-21 11:59:03

+0

如果你真的使用C++,而不是那些可怕的原始数组,你不会有这个问题。也可以通过值 – 2014-11-21 12:00:58

回答

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; 

,你也应该知道,有在头<algorithm>执行相同的任务声明的标准算法std::max_element

例如,你可以写

#include <algorithm> 

//.. 

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

你的函数将返回一个地址,以便如何显示屏幕上该地址的值? – Salma 2014-11-21 12:26:03

+0

@ Salma就像你自己做的一样:cout <<“最大值是”<< * A; – 2014-11-21 12:44:12

+0

它返回给我一个巨大的数字,我没有如何解决这个问题 – Salma 2014-11-21 12:48:58