2015-02-28 2 views
-1

Я только что узнал о указателях и проблемах с этой программой. Моя функция int возвращает первый элемент массива и не возвращает наивысший элемент. Я думаю, что я вызываю неправильное объявление, чтобы получить правильный элемент в основном, но я не уверен, что это правда. И что будет делать NULL, если размер равен 0? Это моя программа до сих пор:Почему не самый высокий элемент не возвращается?

#include <iostream> 
using namespace std; 

int *maxval(int *, int); 

int main() 
{ 
const int size=20; 
int array[size]={21,1,33,15,11,5,2,29, 
33,56,4,44,9,12,19,23,22,35,7,13}; 
int *arrPtr; 
arrPtr=array; 

cout<<"The numbers in set are: "; 
for(int i=0; i<size; i++) 
{ 
    cout<<*(array+i)<<" "; 
} 
maxval(array, size); 
cout<<endl; 
cout<<"Maximum element is: "<< *arrPtr<<endl; 
return 0; 
} 

int *maxval(int *arr, int size) 
{ 
int *maximum=arr; 
for(int i = 0; i<size; i++) 
{ 
    if(arr[i] > *maximum || size != 0) 
    { 
     maximum=&arr[i]; 
     return maximum; 
    } 
    else 
    { 
     return NULL; 
    } 
} 
} 
+1

Как вы ожидаете, что он «вернет» что-либо, когда вы назовете «maxval (массив, размер)» и полностью * проигнорируете * его возвращаемое значение ??? Вы устанавливаете 'arrPtr', чтобы указать на первый элемент массива, и вы никогда его не меняете. Неудивительно, что ваш код всегда печатает первый элемент. – AnT

+0

Ваш алгоритм неверен, а не о указателях. Вы возвращаете NULL на первой итерации. – farukdgn

ответ

1
if(arr[i] > *maximum || size != 0) 
{ 
    maximum=&arr[i]; 
    return maximum; 
} 
else 
{ 
    return NULL; 
} 

Здесь вы возвращаете NULL, как только значение не больше, чем ваш текущий Maximun. Что произойдет на первой итерации.

Вы должны удалить оба возвращается в цикл, и добавить:

return maximun 

после цикла.

Вы должны также удалить условие

size != 0 

Поскольку это всегда будет верно: В случае, если размер был 0 или меньше, то цикл никогда не будет выполняться из-за его конечного состояния.

+0

спасибо, что пользователь2215331. Он возвращает 56 как самый высокий. У меня есть еще один вопрос. Как бы я разыменовал обратный адрес и самый высокий элемент? Или я их разыгрываю? – RocketKatz

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