054
30.11.2006, 17:10 Uhr
Lensflare
|
C++: |
#include <stdio.h>
int main() { int i = 17; int &r = i; //Referenz auf i int *p = &i; //Pointer auf i printf(" i = %i \n", i); //Wert von i printf("&i = %i\n\n",&i); //Adresse von i printf(" r = %i \n", r); //Wert von i printf("&r = %i\n\n",&r); //Wert von r (= Adresse von i) printf(" p = %i \n", p); //Wert von p (= Adresse von i) printf("*p = %i\n\n",*p); //Wert von i char *cp = "Hallo"; char &cr = *cp; printf("*cp = %c\n",*cp); //erstes Zeichen von Hallo = 'H' printf(" cp = %i\n",cp); //Adresse auf erstes Zeichen von Hallo printf("&cr = %i\n",&cr); //Adresse auf erstes Zeichen von Hallo printf(" cr = %c\n",cr); //erstes Zeichen von Hallo = 'H' getchar(); }
|
Also einmal übergebe ich die Adresse von i einer Referenz und einmal einem Pointer. Beide haben die Adresse als Wert und von beiden kann ich herausbekommen, was sich unter der Adresse befindet, nämlich 17
Beide Adressen sind identisch und zeigen auf die erste von den 4 Zellen, in denen sich die Zahl 17 befindet.
Das geht auch mit Zeichenketten. In meinem Beispiel habe ich eine Referenz erstellt, die auf den ersten Buchstaben von "Hallo" zeigt.
Der einzige Unterschied für mich ist, dass man den Wert des Pointers inkrementieren kann, womit dann der Pointer die nächste Adresse als Wert hat. Und ich habe auch gemerkt, dass man Referenzen im Gegensatz zu Pointern immer initialisieren muss, so können sie schon mal nicht auf irgendeine ungewollte Stelle zeigen.
Ist das der Unterschied? Dass Referenzen "sicherer" sind? -- Wenn das Gehirn so einfach wäre, dass wir es verstehen könnten, wären wir so einfach, dass wir es nicht verstehen könnten. (Emerson Pugh Trost) Dieser Post wurde am 30.11.2006 um 17:15 Uhr von Lensflare editiert. |