Wofür sind Referenzen und was machen sie?



  • Ja,also ein freund von mir hat gesagt sie sind für nichts da ich sollte sie einfach vergessen!Aber ich denke man macht nicht einfach Referenzen wenn sie nichts machen!



  • Etyx schrieb:

    Ja,also ein freund von mir hat gesagt sie sind für nichts da ich sollte sie einfach vergessen!

    Das wäre äußerst dumm; konsultiere das C++-Buch Deines Vertrauens für nähere Informationen! ("Thinking in C++" ist sehr gut und online verfügbar!)





  • Ja,also ein freund von mir hat gesagt sie sind für nichts da ich sollte sie einfach vergessen!

    Dein Freund ist in Sachen C++ inkompetent 🙂



  • Mag sein!Aber in meinem Buch versteh ich die Referenzen nicht! 🙄 😕





  • Sind im Grunde Aliasnamen für die Variable/Objekt. Mit der Vererbung der Klassen kann man die Referenzen oder Zeiger auch für weitere Zwecke verwenden als nur für Parameter einer Funktion um das übergebene Objekt direkt zu verändern.



  • Das habe ich jetzt nicht ganz verstanden! 😮 😕



  • int i = 1; // Eine int-Variable
    int& j = i; // Eine int-Referenz, die auf i zeigt.
    
    cout << j; // Es wird der Inhalt von i ausgegeben, da j auf i zeigt und nur ein anderer Name dafür ist
    

    Und noch was: die Referenzen belegen keinen eigenen Speicher, die Zeiger schon. Dafür können die Referenzen aber auch nicht 'springen'.



  • Strogij schrieb:

    Und noch was: die Referenzen belegen keinen eigenen Speicher, die Zeiger schon. Dafür können die Referenzen aber auch nicht 'springen'.

    natuerlich brauchen auch referenzen platz



  • Strogij schrieb:

    Und noch was: die Referenzen belegen keinen eigenen Speicher, die Zeiger schon. Dafür können die Referenzen aber auch nicht 'springen'.

    Das möchte ich mal bezweifeln. Referenzen sind nämlich nichts anderes als dereferenzierte Zeiger. Und dass sie nicht die Adresse ändern können, auf die sie zeigen, dient nur der eigenen Sicherheit und ist kein technisches Problem.



  • Und noch was: die Referenzen belegen keinen eigenen Speicher, die Zeiger schon. Dafür können die Referenzen aber auch nicht 'springen'.

    Was du vielleicht meinst ist, dass wenn man Objekte per Referenzen übergibt, keine Kopie des Objekts angelegt werden muss, was natürlich auch Resourcen spart.



  • Strogij schrieb:

    int i = 1; // Eine int-Variable
    int& j = i; // Eine int-Referenz, die auf i zeigt.
    
    cout << j; // Es wird der Inhalt von i ausgegeben, da j auf i zeigt und nur ein anderer Name dafür ist
    

    Und noch was: die Referenzen belegen keinen eigenen Speicher, die Zeiger schon. Dafür können die Referenzen aber auch nicht 'springen'.

    hier hätte man doch auch die Referenz fallen lassen können oder?



  • Ja.

    Kommt aber immer drauf an was du machen willst, das Beispiel ist natürlich trivial. Es geht darum, dass du jetzt mit j arbeiten kannst, und in wirklich i veränderst. Sinnvoller sind Funktionen:

    #include <iostream>
    using namespace std;
    void funk(int &j) // Die Referenz j ist ein anderer Name für i...
    {
    j++; // Erhöhe j um eins...
    }
    int main()
    {
    int i=6;
    funk(i); // rufe die Funktion funkt mit i auf
    cout << i; // Gib i aus: i wurde in der Funktion verändert, hieß dort aber j
    }
    


  • Strogij schrieb:

    Und noch was: die Referenzen belegen keinen eigenen Speicher, die Zeiger schon. Dafür können die Referenzen aber auch nicht 'springen'.

    Doch können Sie auch! oder ich weiss nicht was du meinst!

    int a = 10;
    int b = 20;
    
    int& ref = a;
    cout << ref << endl; 
    
    ref = b;
    cout << ref << endl;
    


  • CarstenJ schrieb:

    Ja.

    Kommt aber immer drauf an was du machen willst, das Beispiel ist natürlich trivial. Es geht darum, dass du jetzt mit j arbeiten kannst, und in wirklich i veränderst. Sinnvoller sind Funktionen:

    #include <iostream>
    using namespace std;
    void funk(int &j) // Die Referenz j ist ein anderer Name für i...
    {
    j++; // Erhöhe j um eins...
    }
    int main()
    {
    int i=6;
    funk(i); // rufe die Funktion funkt mit i auf
    cout << i; // Gib i aus: i wurde in der Funktion verändert, hieß dort aber j
    }
    

    😕 😕 😕 🙄



  • Hast du jetzt meinen Beitrag nicht verstanden, oder ich deine vorherige Frage nicht?!

    😕 😕 😕 🙄

    Das hilft mir jetzt auch nicht weiter. Naja, wenn du dir die Tutorials mal durchgelesen hast, sollte es eigentlich klarer werden und beachte meinen Beitrag einfach nicht.



  • Strogij schrieb:

    Und noch was: die Referenzen belegen keinen eigenen Speicher, die Zeiger schon. Dafür können die Referenzen aber auch nicht 'springen'.

    Doch können Sie auch! oder ich weiss nicht was du meinst!

    C/C++ Code:
    int a = 10;
    int b = 20;

    int& ref = a;
    cout << ref << endl;

    ref = b;
    cout << ref << endl;

    Strogij hatte mit seiner Aussage, dass Referenzen nicht "springen" können schon recht. in deinem Codebeispiel lässt du eben NICHT ref auf b zeigen, sondern kopierst den Wert von b nach a.



  • LOL, ihr seit ja nett, geht zu viert auf seine Aussage los. 😃

    MfG MAV 🤡



  • Hehe aber echt.. 😃 das mit keinen Speicher verbrauchen meinte ich so: Die Referenzen haben keinen eigenen Wert wie Variablen. Zeiger dagegen schon. Ich meinte nicht, dass man 10.000 Referenzen deklarieren kann, ohne Speicher im System zu verbrauchen. Habe ich jetzt soweit Recht oder nicht? 😮
    Ich stelle mir die Referenzen als zweiten Namen für eine übergebene Variable vor, Zeiger als eine eigenständige Einheit im Speicher mit einem Wert(Adresse im RAM). 😕


Anmelden zum Antworten