Probleme mit Zeigern...



  • Hallo,
    ich bin am durchackern des Buches 'C++ in 21 Tagen', verzweifle aber gerade an Zeigern und Referenzen.
    Wer das Buch kennt, ich bin gerade bei Kapitel 10, da geht es um's Überladen von Funktionen...
    Ich verstehe überhaupt nicht, wann man eine Referenz übergeben muß und wann der Rückgabewert eine sein soll etc. 😞
    Hat/Kennt jemand vielleicht eine übersichtliche, gute Zusammenfassung, wann wie was verwendet wird (Zeiger und Referenzen)?

    Damit wäre mir (hoffentlich 😉 ) wiklich sehr geholfen.

    Viele Grüße und danke schon mal.

    Yvonne



  • Wenn du ein Objekt verändern willst bzw die Funktion das Objekt verändern soll, mache eine Referenz.
    Wenn du Kopierarbeit sparen willst, deklariere eine Variable als Referenz und deklariere sie const, damit angezeigt wird, das diese nicht verändert werden soll. Das lohnt sich nur bei größeren Objekten nicht bei trivialen Datentypen wie int.



  • Hallo randa,

    Deinen zweiten Satz habe ich nicht ganz verstanden, kannst Du mir das näher erklären? (sorry, irgendwie stehe ich gerade auf'm Schlauch)

    Danke
    Yvonne



  • Na, wenn das Objekt größer als ein basis-Datentyp ist, z.b. int, dann ist es schneller, das Objekt als Referenz zu übergeben, da dies wie eine Pointerzuweisung ist, die schnell geht.
    z.B.,

    void DoIt (std::vector Dingsda);	//Großer Vector = Arbeit, da der Copyxonstruktor arbeitet, der alle Elemente kopiert
    void DoIt (std::vector &Dingsda);	//Kein Aufruf des Copy-Konstruktors, Objekt kann verändert werden.
    void DoIt (const std::vector &Dingsda);	//Unveränderlich und kein Aufruf des Copy Konstruktors.
    




  • Dankeschön an Euch beide, 🙂
    ich spiele jetzt selber nochmal ein bischen rum und hoffe, dass ich es alleine hinkriege, wenn nicht, melde ich mich einfach nochmal 😉 .

    Viele Grüße
    Yvonne



  • Hallo nochmal,

    unter dem Link
    http://cplus.kompf.de/artikel/const_print.html

    finde ich im letzten Drittel folgenden Code:

    const char* error_message(int i)
    {
    return "range_error";
    }

    warum funktioniert der Aufruf
    char* e = error_message(5);
    nicht 😕
    weil e dann auf "range_error" zeigt, aber
    nicht konstant ist und damit seinen Inhalt verändern
    kann?

    Danke
    Yvonne



  • Ein const char * ist ein Zeiger auf ein unveränderliches char. Ein char * ist ein Zeiger auf ein veränderliches char. Wenn du also einen Zeiger vom Typ veränderliches char auf nen ptr vom Typ unveränderliches char zeigen lässt, gibt es einen Konflikt, da man eigentlich mit dem benutzen Zeiger das, was zurückgegeben wurde, verändern kann, doch der Rückgabewert bzw. die Funktion erlaubt das nicht. (also Rückgabewert = const)


Anmelden zum Antworten