如何将指针变量作为引用参数传递?

Gal*_*axy 4 c++ pointers pass-by-reference

当你有这样的函数时,形参是一个引用,它变成了实参的另一个名称,这样当我们在函数内部修改形参时,函数外部的原始变量就被改变了。

void add_five(int& a)
{
    a += 5;
}

int main()
{
    int number = 3;
    add_five(number);
    std::cout << number << std::endl;  // prints 8

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我有一些在链接列表上工作的代码。我将两个Node*s 传递给函数。

void LinkedList::move_five_nodes(Node* ptr1, Node* ptr2) { ... }

...

void LinkedList::anotherFunction()
{
    Node* leader;
    Node* trailer;
    ...
    move_five_nodes(leader, trailer);
    ...
}
Run Code Online (Sandbox Code Playgroud)

leader我认为和指针变量内的右值内存地址trailer将被分配到Node*左值ptr1和中ptr2

Node* ptr1 = leader;
Node* ptr2 = trailer;
Run Code Online (Sandbox Code Playgroud)

问题在于ptr1ptr2是函数内独立的局部变量。最初,它们指向与实际参数指针相同的位置。但是,我的函数移动了一些节点,并且在函数结束时,ptr1和 的值ptr2发生了更改。我希望这些更改也包含在原始变量leader和中trailer,就像引用一样。所以即使当ptr1ptr2到期时,leadertrailer应该进场。

我该怎么做?也许将指针类型转换为int&?或者也许使用指向指针的指针?我想通过引用传递指针,但我不知道该怎么做。

小智 6

我想通过引用传递指针,但我不知道该怎么做。

为此,请考虑以下代码片段

#include <iostream>

void test(int*& t)
{
    t = nullptr;
}

int main()
{
    int* i = new int(4);

    test(i);

    if (i == nullptr)
        std::cout << "I was passed by reference" << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

其中 is 通过引用传递给 test,其中它被设置为 nullptr 并且程序打印:I was passed by reference

我认为这个例子应该清楚地说明如何通过引用函数来传递指针。

因此,在您的情况下,函数签名必须更改为

void LinkedList::move_five_nodes(Node*& ptr1, Node*& ptr2) { ... }
Run Code Online (Sandbox Code Playgroud)

  • 还有一个很好的双关语“我是通过引用传递的”。 (2认同)