如指令所述,我无法确定如何修正错误,而不更改主例程中的任何内容。编译器给我一个错误,第20行是主程序中调用findMax函数的那一行,因为ptr正在被使用而没有被初始化。初始化错误
我不明白为什么编译器说ptr没有被初始化,因为在findMax函数中,pToMax被设置为等于arr。
我试图通过将pToMax的初始化更改为int ** pToMax并将*添加到findMax函数中的所有后续pToMax实例,来使pToMax成为指向ptr的指针。但是,在我这样做后,编译器说它不能在int 20上从int *转换为int **。
我能想到的唯一的其他修复方法是在主例程中初始化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在发布这个之前,应该尽可能使用堆栈溢出用户/ 182380#182380)。 – WhozCraig