Когда у вас есть такая функция, формальный параметр является ссылкой, он становится другим именем для фактического аргумента, поэтому, когда мы изменяем формальный параметр внутри функции, изменяется исходная переменная вне функции.
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);
...
}
Я думаю, что адреса памяти rvalues внутри переменных указателя leader
и trailer
будут назначены в Node*
lvalues ptr1
и ptr2
.
Node* ptr1 = leader;
Node* ptr2 = trailer;
Проблема в том, что ptr1
и ptr2
являются независимыми локальными переменными внутри функции. Первоначально они указывают на то же место, что и действительные указатели аргументов. Однако моя функция перемещает некоторые узлы, и в конце функции значения ptr1
и ptr2
изменяются. Я хочу, чтобы эти изменения также были в исходных переменных leader
и trailer
, как ссылки. Так что даже когда ptr1
и ptr2
истекают, leader
и trailer
должны идти в свои позиции.
Как бы я это сделал? Может быть, наберите указатели на int&
? Или, может быть, использовать указатели на указатели? Я хочу передать указатель по ссылке, но я не уверен, как это сделать.