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.


  • Mod

    return *ptr; // Gibt die Adresse der Variable var zurück
    

    Nein, 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 wurde
    

    Nein ref wird der Wert zugeschrieben, den *ptr hat

    // Es wird extra eine lokale Variable angelegt
    

    Häh?

    int &ref_2 = function();  // ref_2 greift auf die Adresse zu welche von function zurückgegeben wurde
    

    Nein, 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.


Anmelden zum Antworten