Per Referenz/konstante Referenz übergeben - Verständnisproblem



  • Hey Leute, - bin noch ein ziemlicher Noob, also schon mal ein sry im Voraus.

    in meinem C++ Lehrbuch bin ich gerade bei der Referenzübergabe an Funktionen. Nun habe ich zwei verschiedene Beispiele. Einmal ohne, und einmal mit konstanter Referenz:

    Ohne Konstante:

    int MeineFunktion(int &myparam)
    {...
    

    Mit Konstante:

    int MeineFunktion(const int *myparam)
    {...
    

    Was ist nun der Unterschied? Kann ich bei Konstanten nicht auch einfach '&' benutzen? Ich meine, auch mit '&' ist die ursprüngliche Variabel nicht veränderbar, zudem könnte es bei der '*' Methode dazu kommen, dass man die Speicheradresse verändert, was mich ziemlich beunruhigt.

    Hoffe die Funktionsköpfe reichen euch xD.



  • Du vermischt in deiner Frage 2 Dinge:

    a) const und non-const
    b) Referenz vs Pointer

    int MeineFunktion(int &myparam) - Funktion mit veränderbarem Referenzparameter
    int MeineFunktion(const int &myparam) - Funktion mit konstantem Referenzparameter

    vs.
    int MeineFunktion(int *myparam) - Funktion mit Pointer-Parameter (der in der Funktion änderbar ist) auf einen veränderbaren int
    int MeineFunktion(const int *myparam) - Funktion mit Pointer-Parameter (der in der Funktion änderbar ist) auf einen nicht-veränderbaren int
    und auch:
    int MeineFunktion(int * const myparam) - Funktion mit Pointer-Parameter (der in der Funktion nicht änderbar ist) auf einen veränderbaren int
    int MeineFunktion(const int * const myparam) - Funktion mit Pointer-Parameter (der in der Funktion nicht änderbar ist) auf einen nicht-veränderbaren int

    Was ist nun der Unterschied? Kann ich bei Konstanten nicht auch einfach '&' benutzen?

    Wie gesagt, const vs non-const und Referenz vs Pointer sind zwei unterschiedliche Dinge.

    Ich meine, auch mit '&' ist die ursprüngliche Variabel nicht veränderbar, zudem könnte es bei der '*' Methode dazu kommen, dass man die Speicheradresse verändert, was mich ziemlich beunruhigt.

    Das verstehe ich nicht so ganz. Wo kann hier eine Adresse verändert werden?



  • @wob Vielen Dank 🙂 Du hast mein Problem schon gelöst ^^. In meinem Buch fällt,

    int MeineFunktion(const int *myparam)
    

    unter "als konstante Referenz übergeben".

    Deine Auflistung hat mir gleich die Augen wieder geöffnet, und dass mit dem "Adresse verändern" war auf
    "Funktion mit Pointer-Parameter (der in der Funktion änderbar ist) auf einen nicht-veränderbaren int"
    bezogen, was sich mir jetzt auch ergibt.

    Vielen herzlichen Dank ❤


Anmelden zum Antworten