代码之家  ›  专栏  ›  技术社区  ›  Galaxy

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

  •  3
  • Galaxy  · 技术社区  · 6 年前

    void add_five(int& a)
    {
        a += 5;
    }
    
    int main()
    {
        int number = 3;
        add_five(number);
        std::cout << number << std::endl;  // prints 8
    
        return 0;
    }
    

    我有一些在链表上工作的代码。我过了两个 Node* 把它放入函数中。

    void LinkedList::move_five_nodes(Node* ptr1, Node* ptr2) { ... }
    
    ...
    
    void LinkedList::anotherFunction()
    {
        Node* leader;
        Node* trailer;
        ...
        move_five_nodes(leader, trailer);
        ...
    }
    

    leader trailer 指针变量将被分配到 节点* 左值 ptr1 ptr2

    Node* ptr1 = leader;
    Node* ptr2 = trailer;
    

    问题是 ptr1型 ptr2型 是函数内部的独立局部变量。最初,它们指向与实际参数指针相同的位置。但是,我的函数移动了一些节点,在函数的末尾 ptr1型 ptr2型 都变了。我希望这些更改也在原始变量中 领导 拖车 ,就像参考文献一样。所以即使在 ptr1型 ptr2型 领导 拖车

    我该怎么做?也许你可以把指针 int& ? 或者用指针指向指针?我想通过引用传递一个指针,但我不知道怎么做。

    1 回复  |  直到 6 年前
        1
  •  3
  •   user32434999    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;
    }
    

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

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

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