Frage zu Referenzen und Pointern
-
Stimmt das so wie ich den Code kommentiert habe?
#include <iostream> using namespace std; int *ptr=0; int &function ( ) { cout<<"ptr zeigt auf Adresse: "<< hex << ptr<<endl; return *ptr; // Gibt die Adresse der Variable var zurück } int main() { int var =8; cout<<"Variable var steht an Adresse: " << hex << &var<<endl; ptr=&var; int ref = function(); // In ref wird der Wert geschrieben der an der Adresse steht welcher von function zurückgegeben wurde // Es wird extra eine lokale Variable angelegt cout<<"ref Ausgabe: "<< ref <<endl; cout<<endl<<endl; int &ref_2 = function(); // ref_2 greift auf die Adresse zu welche von function zurückgegeben wurde // Hier wird nicht nochmal extra eine lokale Variable angelegt. cout<<"&ref_2 greift auf die Adresse: " << &ref_2 << " zu"<<endl; cout<<"ref2 Ausgabe: " << ref_2 <<endl<<endl<<endl; system("PAUSE"); return 0; }Und hier:
int &ref_2 = function();arbeitet &ref_2 doch eigentlich wie ein Pointer oder werfe ich da jetzt was durcheinander?
Weil &ref_2 bekommt ja eine Adresse übergeben und das was an der Adresse steht gebe ich mit
cout<<ref_2<<endl;aus.
-
return *ptr; // Gibt die Adresse der Variable var zurückNein, gibt eine Referenz auf *ptr zurück.
int ref = function(); // In ref wird der Wert geschrieben der an der Adresse steht welcher von function zurückgegeben wurdeNein ref wird der Wert zugeschrieben, den *ptr hat
// Es wird extra eine lokale Variable angelegtHäh?
int &ref_2 = function(); // ref_2 greift auf die Adresse zu welche von function zurückgegeben wurdeNein, ref2 wird mit dem Funktionsergebnis initialisiert, welches eine Referenz auf *ptr ist. Nichts mit Adressen und Zugriffen.
// Hier wird nicht nochmal extra eine lokale Variable angelegt.Wieder: Häh? Sowohl ref als auch ref2 sind lokal in main.
Und hier:
int &ref_2 = function();arbeitet &ref_2 doch eigentlich wie ein Pointer oder werfe ich da jetzt was durcheinander?
Referenzen haben große Ähnlichkeiten mit Pointern, oft sind sie intern auch mit Pointern implementiert. Aber Referenzen sind keine Pointer, sie sind Referenzen und es gelten andere Regeln für sie.
Weil &ref_2 bekommt ja eine Adresse übergeben und das was an der Adresse steht gebe ich mit
cout<<ref_2<<endl;aus.
Erstens wird hier &ref_2 nichts übergeben, das & gehört hier zum Typen. Und eine Referenz ist kein Pointer, sondern eine Referenz und das was du da ausgibst ist das was die Referenz, äh..., referenziert.
Zusammengefasst: Man hat beim Lesen das Gefühl, dass du das Thema möglicherweise verstanden hast, aber durch deine komische Ausdrucksweise kann man sich nicht sicher sein.
-
refref schrieb:
int *ptr=0; int &function ( ) { cout<<"ptr zeigt auf Adresse: "<< hex << ptr<<endl; return *ptr; // Gibt die Adresse der Variable var zurück }Ich würde hier "Referenz auf die" statt "Adresse der" sagen. Wobei ich das mit der Referenz erst bei näherem Hingucken gesehen habe. In C++ ist meines Wissens nach folgender Stil populärer
int* ptr=0; int& function();Zumindest schreibe ich das so.
Ich denke, Du hast es verstanden, wobei die Beschreibungen wie "greift auf die Adresse zu" ein bisschen komisch sind. Es sind nunmal Referenzen.