初始化错误
如指令所述,我无法确定如何修正错误,而不更改主例程中的任何内容。编译器给我一个错误,第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;
}
findMax()
只是修改本地变量。你需要的是价值某种方式传播回调用函数 - 最简单的方法是把它作为,而不是一个参考:
void findMax(int arr[], int n, int*& pToMax)
{
// ...
}
(还有11个要去) –
@ user2752992如果指令如你所说(一个不可修改的'main()')这是*唯一*的方法来做到这一点。 – WhozCraig
谢谢,它的工作。 我仍然困惑为什么,虽然。 当我用ptr调用findMax时,int *&pToMax被设置为ptr。 int *&pToMax基本上是指向pToMax的指针指向的东西,即pToMax?但是pToMax的类型是什么?它必须是一个指针,如果它可以设置为ptr,但为什么它会有一个&? 对不起,我不知道技术术语,但我很困惑 – gallardoelise
findMax()
应该得到一个指针指向int的指针,指针,而不是为int,如果你想通过引用传递指针本身。请记住,C中的每个值都通过复制传递,这意味着您要将ptr
的副本传递给findMax()
。在findMax()
内部,您可以将它指向其他地方,但这些更改将不会在main()
中可见。因此,使用ptr
main()
会导致您在打印其地址时出现未定义的行为。
使用指针,指针增加一个间接的另一个层面,是这样的:
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 *
转换为int **
当你这样做,因为ptr
是int *
类型。你需要使用引用运营商&
获得一个指向ptr
并将它传递给findMax()
:
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;
}
这应该修复它。
当然是正确的,但OP已经表示他不能改变'main'功能。 –
是的,这个问题被标记为C,如果你使用C,我认为你不能在不更改'main'的情况下修复它。使用C++,你的答案肯定是他想要的。 –
您正在传递'pToMax'。将其作为函数返回值返回或通过地址('int ** ppToMax')传递并在其中进行适当编码。 – WhozCraig
@WhozCraig,当然这是一个答案? :) –
@ Moo-Juice到现在为止,我正盯着C和C++标签,并不确定OP想要什么。值得庆幸的是,无论如何,六个人都会回答基地问题,巩固[研究提出]的强有力指标(http://meta.stackexchange.com/questions/182266/how-much-research在发布这个之前,应该尽可能使用堆栈溢出用户/ 182380#182380)。 – WhozCraig