[Grundlagen] Zeiger vs. Referenz



  • Hi,

    hab mal eine grundsätzliche Frage, die sich mir beim Durcharbeiten von Tutorials gestellt hat:

    Was ist der grundsätzliche Unterscheid zwischen Zeigern und Referenzen, bzw. warum nutzt man Referenzen, wenn Zeiger die Sache auch tun würden?

    Ich hab gelesen, das eine Referenz nichts anderes als ein konstanter Zeiger ist. Ausserdem kann man bei Referenzen den .-Operator anstatt des ->-Operators verwenden. Mir bleibt aber bisher der Nutzen ein Rätsel. Kann mir da jemand helfen?

    Grüsse,
    don_basto



  • Suchfunktion benutzen!!1



  • eine Referenz kann niemals null sein, ein Zeiger schon.



  • Referenzen sind eben schöner zu benutzen und konstante Zeiger. Wenn man die zusäzlichen Features von Zeigern nicht braucht, gibt es IMO keinen Grund, keine Referenzen zu benutzen.
    Außerdem braucht man Referenzen bei der Operatorüberladung, es würde dir sicherlich komisch vorkommen, wenn du zwei Uhrzeit-Objekte erstellst und musst dann bei '+' die Adressen übergeben. 🙂



  • Programmierer sind faul, wenn es sinnvoll ist. Warum sollte man jedesmal explizit derreferenzieren wollen?

    Außerdem muss eine Referenz nicht zwangsweise durch einen Zeiger implementiert werden:

    int x = 42;
    int const & y = x;
    

    Hier wäre y bei den meisten Compilern gar nichts. Sie würden einfach direkt x verwenden aber auf Constheit hin prüfen. Wenn eine Funktion, die geinlined wird eine Referenz als Parameter erwartet ist vermutlich ähnliches möglich.



  • Hai Don_Basto,
    bin jetzt nicht der Superprofi, aber denke der griundsätzliche Unterschied ist mir schon klar: Ne Referenz ist nur ein Namens-Alias auf ein Object. Du arbeitest praktisch mit dem Object selbst (Nur unter anderem Namen) und nicht mit 'ner Adresse des Objects (->Zeiger). Deswegen muss eine Referenz auch gleich initialisiert werden und kann nicht geändert werden (mit wenigen, speziellen Ausnahmen). Daher kann auch die Adresse nicht 'aus Versehen' auf irgendetwas anderes (oder NULL) zeigen und dort womöglich Unheil anrichten.
    Ich würde daher sagen, dass es sich nicht um einen Konstanten Zeiger handelt, aber die Referenz entspricht technisch gesehen einem solchem Zeiger, der aber zusätzlich bei jedem Zugriff quasi automatisch derefenziert wird.
    Die Vorteile der Referenz sind einfaches Handling und höhere Sicherheit.
    Die Vorteile der Zeiger sind Ihre hohe Flexibilität.
    Hoffe das hilft dir fürs Erste etwas weiter.



  • Warum erklärt ihr eigentlich alles neu? Das steht doch alles schon im Forum!!!1



  • Wir haben nichts zu tun und uns ist langweilig.



  • Danke für die Antworten.
    Hab jetzt auch die Suchfunktion kennengelernt ;), fand aber die konkreten Anworten hier wesentlich besser :).
    Der Zweck wird mit mir mit der Zeit schon deutlicher.

    Grüsse,
    don_basto



  • Hast du denn kein Buch in dem sowas drin steht? Wenn nicht wäre es sehr zu empfehlen dir eins anzuschaffen. In "Jetzt lerne ich C++" (15€) wird der Unterschied zum Beispiel sehr einfach und verständlich erklärt.


Anmelden zum Antworten