Z:
addNode(node *&head, int value)
... rodzaj head
jest „odniesienie do wskaźnika do -węzeł".
Z:
addNode(node **head, int value)
... typ jest "wskaźnik do wskaźnika do węzła".
Wskaźnik i odniesienie to , a nie to samo. Prostym sposobem na odniesienie się jest wskaźnik o wartości .
Będziesz potrzebować innej składni zadzwonić obie wersje:
node* my_node = 0;
addNode(my_node, 0); // syntax for first version
addNode(&my_node, 0); // syntax for 2nd version
Istnieją różnice semantyczne, jak również. Po przekazaniu wskaźnika można przekazać wartość NULL. Kiedy przekazujesz referencję, nie możesz.To jest funkcja, która bierze Ref-to-ptr myli sprawa trochę, więc zmieńmy problemu trochę:
void make_string(string& str_ref)
{
str_ref = "my str";
}
void make_string_again(string* str_ptr)
{
*str_ptr = "my other string";
}
Te dwa finctions zrobić to samo, ale jeden zajmuje string
odniesienie natomiast drugi zajmuje wskaźnik string
. Jeśli było to zrobić:
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
Widać staje się trudne (ale nie niemożliwe), aby wywołać make_string
z zerowym wskaźnikiem. Może to pomóc w implementacji lepszych funkcji w przypadku, gdy oczekuje się, że zostanie wywołany z nieprawidłowym obiektem.
Przynajmniej według artykułu, który znalazłem, jest wskaźnikiem odniesienia, a nie odwrotnie. (Nie byłem pewien, który z nich był mną, więc naprawdę nie wiem na pewno.) Różnica może być bardzo subtelna, ale w rzadkich przypadkach może powodować pewne zamieszanie. –
Nie można mieć wskaźnika do odniesienia (to jest kolejna różnica między wskaźnikami i odniesieniami nawiasem mówiąc, a jest to również wspomniane na stronie, z którą się łączyłem). Zobacz także to pytanie: http://stackoverflow.com/questions/1898524/difference-between-pointer-to-a-reference-and-reference-to-a-pointer –
Dobra uwaga. Nie myślałem o tym wystarczająco dokładnie. Próbowałem myśleć o tym w kategoriach związania operatora. –