Pointer and reference
-
Hey.
Könnte mir jemand das mit dem Zeiger und Referenz mal grafisch darstellen?
-
Pointer:
http://www.youtube.com/watch?v=UvoHwFvAvQEReferenzen:
Ist etwas schwierig, das darzustellen. Da musst du auf die Antowrt von jemand anderem warten.
-
Ich find's hilfreich, mir klar zu machen, dass Referenzen nur Aliasse sind, also nur andere Namen für das Original-Objekt. Mit diesem Bild im Kopf kommt man ganz gut klar. Insbesondere, was die Unterschiede zwischen Pointern und Referenzen angeht.
Stefan.
-
DStefan schrieb:
Ich find's hilfreich, mir klar zu machen, dass Referenzen nur Aliasse sind, also nur andere Namen für das Original-Objekt. Mit diesem Bild im Kopf kommt man ganz gut klar. Insbesondere, was die Unterschiede zwischen Pointern und Referenzen angeht.
Denke auch, dass das gut passt. Denn Referenzen müssen, im Gegensatz zu Pointern nicht unbedingt Speicher in Anspruch nehmen. Und es scheint auch logischer, warum denn Referenzen per se konstant sind.
-
Referenzen sind nur ein Sprachkonstrukt in C++ und anderen Programmiersprachen. Intern funktionieren sie über Zeiger oder werden gleich wegoptimiert.
Denn Referenzen müssen, im Gegensatz zu Pointern nicht unbedingt Speicher in Anspruch nehmen.
Zeiger aber auch nicht:
const char * const VARIABLE_MIT_SEHR_LANGEM_NAMEN = "test"; const char * str = VARIABLE_MIT_SEHR_LANGEM_NAMEN;Das wird ein vernünftiger Compiler wohl nicht so stehen lassen.
-
Ich fand immer hilfreich:
Zeiger sind selbst adressierbar - Referenzen nicht.Gruß,
Simon2-
-
TyRoXx, wenn du drauf anspielst, daß es auf die Länge des Variablennamens ankommt, dann hast du es fehlinterpretiert. Im fertigen Programm gibt es eh keine Variablennamen mehr, sondern dies sind nur noch Speicheradressen (von den Debug-Infos mal abgesehen).
-
Th69 schrieb:
TyRoXx, wenn du drauf anspielst, daß es auf die Länge des Variablennamens ankommt, dann hast du es fehlinterpretiert. Im fertigen Programm gibt es eh keine Variablennamen mehr, sondern dies sind nur noch Speicheradressen (von den Debug-Infos mal abgesehen).
Ich glaube eher, dass er darauf abzielt, dass das Objekt VARIABLE_MIT_SEHR_LANGEM_NAMEN vom Compiler wegoptimiert wird (wenn es nicht weiter als wie gezeigt verwendet wird).
Gruß,
Simon2.
-
Aber warum hat er dann extra "...MIT_SEHR_LANGEM_NAMEN" geschrieben?
-
Th69 schrieb:
Aber warum hat er dann extra "...MIT_SEHR_LANGEM_NAMEN" geschrieben?
Vielleicht, damit man ihn im Object besser findet?
Keine Ahnung....Gruß,
Simon2.
-
Vielleicht, um plausibel zu machen, warum man einen Pointer auf den Inhalt dieses Pointers mit seeehr langem Namen haben wollen würde, statt den seeehr langen Namen ständig ausschreiben zu müssen?

-
Ja, aber dann haben beide Zeiger auch konkrete Speicheradressen.
Irgendwie verstehe ich den Einspruch von TyRoXx immer noch nicht!
Wenn ein Compiler etwas wegoptimiert, bedeutet das ja zwangsläufig, daß dafür kein Speicherplatz verschwendet wird (egal ob Zeiger, Referenz oder eine Funktion).