c++ - 初始化错误

标签 c++

按照说明,我无法弄清楚如何在不更改主例程中的任何内容的情况下修复错误。编译器在第 20 行(主例程中调用 findMax 函数的那一行)给我一个错误,因为 ptr 在未初始化的情况下被使用。

我不明白为什么编译器说ptr没有被初始化,因为在findMax函数中,pToMax被设置为等于arr。

我尝试通过将 pToMax 的初始化更改为 int** pToMax 并将 * 添加到 findMax 函数中 pToMax 的所有后续实例来使 pToMax 成为指向 ptr 的指针。然而,在我这样做之后,编译器说它不能在第 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)
{
    // ...
} 

关于c++ - 初始化错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20213376/

相关文章:

c++ - 如何在 MAP STL : C++ 中显示 LIST 中包含的值

检测到 C++ 堆损坏

C++如何检查存储在 vector 中的所有对象的元素是否具有相同的值?

c++ - 在 "event.GetFrom(m_cpVoice)==S_OK"时调用函数(因此事件发生时)[SAPI 5.1 和 C++]

c++ - 代码::Blocks, and C++ Compiler problem. cant compile a header

c++ - C语言多线程串口编程

c++ - 为什么C++的复杂类要用getter和setter?

C++:从模板化基类覆盖函数

c++ - 如何使用 C++ 返回函数中的类?

c++ - 将自动类型变量初始化为零。这种类型安全吗?