2016-05-07 24 views
0

Was ist der Unterschied zwischen CodeA und CodeB unten ?: Sie sind beide syntaktisch korrekt und es scheint, dass beide Code den ursprünglichen Zeiger "Kopf" ändern können.Verweis auf Zeiger vs Pass by reference?

Bitte korrigieren Sie mich, wenn ich falsch

Code A: (Pass durch Verweis)

NodeType *head = new NodeType(); 
insertNode(*head, val); 
void insertNode(NodeType &head, int val) {} 

-Code B: (Referenz auf Pointer)

NodeType *head = new NodeType(); 
insertNode(head, val); 
void insertNode(NodeType *&head, int val) {} 

EDIT Möchte man hinzufügen, welche Situation Code A vorzuziehen ist und umgekehrt?

+0

Sie sind nicht gleich, in 'CodeB' können Sie' Kopf'-Zeiger (wo es zeigt) ändern, das ist alles. – PcAF

Antwort

4

es scheint, beide Code Lage sein wird, den ursprünglichen Zeiger "Kopf"

Wrong zu ändern. Nur Code B kann den Zeiger head ändern. Code A empfängt das Objekt NodeType, auf das head zeigt, nicht den Zeiger.

Welche Situation ist Code A vorzuziehen und umgekehrt?

Code A ist vorzuziehen, wenn die Funktion nur ein Objekt NodeType benötigt.

Code B ist vorzuziehen, wenn die Funktion den Zeigerwert ändern muss, z. Ändern Sie es auf einen anderen NodeType Objekt.

+0

ok, also hat Code A das Objekt nodetype erhalten, es ist immer noch dasselbe Objekt, auf das der ursprüngliche "Kopf" -Zeiger zeigt, oder? Eine Änderung des Objekts aus Code A kann den ursprünglichen Objektpunkt nach Head ändern. Bitte korrigieren Sie mich, falls ich falsch liege. Wenn das obige korrekt ist, dann können Code A und Code B das ursprüngliche Objekt ändern. –

+0

@ Mr.Y Korrekt. Der einzige Unterschied besteht darin, dass Code B nicht nur das NodeType-Objekt ändern kann, sondern auch den Wert des übergebenen Zeigers. – emlai

Verwandte Themen