С:
addNode(node *&head, int value)
... тип head
является «ссылка на указатель на -узел".
С:
addNode(node **head, int value)
... тип "указатель на указатель на узел".
Указатель и справки не То же. Простой способ думать о ссылке - это разыменованный указатель.
Вам потребуется различный синтаксис для вызова обе версии:
node* my_node = 0;
addNode(my_node, 0); // syntax for first version
addNode(&my_node, 0); // syntax for 2nd version
Есть семантические различия. Когда вы передаете указатель, вы можете передать NULL. Когда вы передаете ссылку, вы не сможете.Поскольку это функция, которая принимает реф-к-PTR путает этот вопрос немного, так что давайте изменим проблему немного:
void make_string(string& str_ref)
{
str_ref = "my str";
}
void make_string_again(string* str_ptr)
{
*str_ptr = "my other string";
}
Этих два finctions сделать то же самое, но один принимает string
ссылки, а другие принимают a string
указатель. Если вы должны были сделать это:
string str;
make_string(str); // OK
make_string_again(&str); // OK - &str is a pointer to a real string
make_string_again(0); // Not OK - compiles but will crash when function dereferences the null pointer
Вы можете видеть, что это становится трудно (но не невозможно), чтобы вызвать make_string
с нулевым указателем. Это может помочь вам реализовать лучшие функции в том случае, если вы ожидаете, что make_string
будет никогда не будет с недопустимым объектом.
По крайней мере, согласно найденной статье, это указатель на ссылку, а не наоборот. (Я не был уверен, какой из них он сам, поэтому я действительно не знаю точно). Разница может быть очень тонкой, но в редких случаях это может вызвать некоторую путаницу. –
У вас нет указателя на ссылку (это еще одно различие между указателями и ссылками, и это также упоминается на странице, с которой я связан). См. Также этот вопрос: http://stackoverflow.com/questions/1898524/difference-between-pointer-to-a-reference-and-reference-to-a-pointer –
Хорошая точка. Я не думал об этом достаточно близко. Я просто пытался подумать об этом с точки зрения привязки оператора. –