【发布时间】:2018-09-15 23:39:35
【问题描述】:
当你有这样一个函数时,形参是一个引用,它变成了实参的另一个名字,这样当我们在函数内部修改形参时,函数外部的原始变量就改变了。
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*s 传递给函数。
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&?或者也许使用指向指针的指针?我想通过引用传递一个指针,但我不知道该怎么做。
【问题讨论】:
-
听起来你只需要重新设计你的函数
move_five_nodes。然而,这有点难说。指向指针的指针可能工作得很好。我不明白使用这些有什么问题。
标签: c++ pointers pass-by-reference