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 Pointerint MeineFunktion(int &myparam)
- Funktion mit veränderbarem Referenzparameter
int MeineFunktion(const int &myparam)
- Funktion mit konstantem Referenzparametervs.
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 intWas 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