2012-04-05 3 views
1

Wären diese beiden Zuweisungen äquivalent, d. H. Genau dieselbe Aufgabe?dereferenzieren eines Zeigers -vs- & -operator

*pointer = object 

pointer = &object 

, wobei Zeiger ein Zeiger auf eine "Objektinstanz" ist.

Oder ist dies nur für primitive Typen sinnvoll.

+3

Sie sind definitiv * sehr * anders. Sie müssen mehr über Zeiger lesen (und experimentieren). –

+0

Dies ist eines dieser Dinge, die viel einfacher zu verstehen sind, wenn Sie einen Bleistift und etwas Papier herausziehen und zeichnen * was passiert mit Boxen und Pfeilen. IMO, Bleistift und Papier sind die besten Werkzeuge, um die meisten Zeigerprobleme zu lösen. – molbdnilo

+0

ja du hast Recht.Ich hätte es mir vor dem Posting durchdenken sollen. Danke für Tipps! –

Antwort

5

Absolut nicht.

*pointer = object 

ändert den Speicher, auf den der Zeiger zeigt.

pointer = &object 

ändert den Zeiger.

pointer ----> object1 
&object ----> object 

Im ersten Fall wird daraus:

pointer ----> object 
&object ----> object 

Im zweiten Fall:

    ----> object1 //could turn into a memory leak 
&object, pointer ----> object 
11

Nein, das ist nicht die gleiche.

pointer = &object setzt pointer, so dass es auf object zeigt.

*pointer = object setzt den Wert der Sache, auf die durch pointer gezeigt wird, gleich dem Wert object.

0

NR.

Ihr erster Ausdruck weist den Wert des Objekts dem Zeiger zu.

Angenommen, Ihre Zeigervariable zeigt auf 0x1234. Nach der ersten Zuweisung enthält die Adresse 0x1234 den Wert "object".

während die zweite Zuweisung den Zeiger auf die Adresse des Objekts zeigen wird.

Wenn Sie das Wertobjekt ändern, nachdem der erste Zuweisungszeiger nichts bemerkt hat.

wo als zweite Zuordnung, wenn Sie den Wert des Objekts zu ändern, können Sie den aktualisierten Wert durch

*pointer. 
2

Nein bekommen können, sind diese nicht gleichwertig. Die erste setzt den Zielwert des Zeigers gleich dem Objekt auf der rechten Seite. Die zweite ändert den Zeiger selbst, so dass er auf das Objekt auf der rechten Seite zeigt.

Mit anderen Worten, nach dem ersten gibt es zwei Objekte im Speicher mit Werten gleich Wert. Nach der Sekunde gibt es nur ein Objekt mit diesem Wert und zusätzlich gibt es einen Zeiger, der auf dieses Objekt zeigt.