У меня возникли проблемы с выяснением того, как исправить ошибку БЕЗ изменения чего-либо в основной процедуре, как говорят инструкции. Компилятор дает мне ошибку в строке 20, строке в основной подпрограмме, которая вызывает функцию findMax, потому что ptr используется без инициализации.Ошибка инициализации
Я не понимаю, почему компилятор говорит, что ptr не инициализируется, потому что в функции findMax значение pToMax устанавливается равным arr.
Я попытался сделать pToMax указателем на ptr, изменив его инициализацию на int ** pToMax и добавив * ко всем последующим экземплярам pToMax в функции findMax. Однако после того, как я это сделал, компилятор сказал, что он не может преобразовать из int * в int ** в строке 20.
Единственное другое исправление, о котором я мог думать, это инициализировать int * ptr до nullptr в основной процедуре , но в инструкциях говорится, что мне не разрешено изменять основную процедуру.
void findMax(int arr[], int n, int* pToMax)
{
if (n <= 0)
return; // no items, no maximum!
pToMax = arr;
for (int i = 1; i < n; i++)
{
if (arr[i] > *pToMax)
pToMax = arr + i;
}
}
int main()
{
int nums[4] = { 5, 3, 15, 6 };
int* ptr;
findMax(nums, 4, ptr);
cout << "The maximum is at address " << ptr << endl;
cout << "It's at position " << ptr - nums << endl;
cout << "Its value is " << *ptr << endl;
}
Вы передаете значение «pToMax». Либо верните его как возвращаемое значение функции, либо передайте его по адресу ('int ** ppToMax') и соответствующим образом скопируйте его. – WhozCraig
@WhozCraig, конечно, это ответ? :) –
@ Moo-Juice до сих пор я смотрел на тег C и C++ и не совсем был уверен, чего хочет OP. К счастью, полдюжины человек будут отвечать на ответы на вопросы об основах независимо от того, что укрепило сильный показатель [исследования] (http://meta.stackexchange.com/questions/182266/how-much-research -effort-is-expected-of-stack-overflow-users/182380 # 182380) перед публикацией этого. – WhozCraig