当您具有这样的函数时,形式参数是一个引用,它成为实际参数的另一个名称,因此,当我们在函数内部修改形式参数时,该函数外部的原始变量将被更改。
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
指针变量内的右值内存地址将分配到Node*
左值ptr1
和ptr2
中。
Node* ptr1 = leader;
Node* ptr2 = trailer;
问题在于ptr1
和ptr2
是函数内部的独立局部变量。最初,它们指向与实际参数指针相同的位置。但是,我的函数移动了一些节点,并且在函数末尾,ptr1
和ptr2
的值被更改。我希望这些更改也可以在原始变量leader
和trailer
中进行,就像引用一样。因此,即使ptr1
和ptr2
到期了,leader
和trailer
也应该摆在自己的位置。
我该怎么做?也许将类型转换为int&
指针?或者也许使用指向指针的指针?我想通过引用传递一个指针,但是我不确定该怎么做。
答案 0 :(得分:3)
我想通过引用传递一个指针,但是我不确定该怎么做。
为此,请考虑以下代码段
#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;
}
,通过引用传递给test,其中将其设置为nullptr,程序打印:I was passed by reference
。
我认为该示例应阐明如何通过引用函数来传递指针。
因此,在您的情况下,函数签名必须更改为
void LinkedList::move_five_nodes(Node*& ptr1, Node*& ptr2) { ... }