2014-11-21 4 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

+0

Правильно отформатируйте свой код - в настоящее время он довольно нечитабелен. –

+0

Если вы действительно использовали C++, а не те ужасные сырые массивы, у вас не было бы этой проблемы. Также возвращаем 'int' по значению –

ответ

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

or

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); 
+0

Ваша функция вернет адрес, чтобы как было показано значение, указанное по этому адресу на экране? – Salma

+0

@ Salma Точно так же, как вы делаете это самостоятельно: cout << "the maximum is" << * A; –

+0

он возвращает мне огромное число, я не мог решить эту проблему. – Salma

Смежные вопросы