Referenzoperator und Dereferenzoperator
-
Hallo zusammen,
ich muss nun noch einen Thread eröffnen, da ich aus den Ferien zurückgekommen bin und sich eine ganze Menge an Fragen angestaut haben. Ich hoffe, dass das in Ordnung ist. Diesmal geht es um den Referenzoperator („&“).Frage1: Stimmt es, dass dieser einfach aus einem Wert die Adresse macht. Und wofür brauche ich ihn?
Ich habe folgendes kleine Programm. Darin wird einfach ein String vertauscht:
void ExChange (String x, String y) { String z = x, x = y, y = z; }
Laut meinen Unterlagen wird der String auch schön brav vertauscht, doch leider nur in dieser Methode. Da es sich um eine Prozedur handelt, können die vertauschten Werte nicht zurückgegeben werden. Selbst wenn es sich um eine Funktion handeln würde, so könnte nur ein Wert zurückgegeben werden. Daher wurde diese Methode so umgeändert:
void ExChange (String &x, String &y) { String z = x, x = y, y = z; }
Frage 2: Ist meine folgende Annahme richtig? Die Werte der beiden Strings, die über den Parameter aufgenommen werden in ihren Adressen umgewandelt. Es werden also die Werte vertauscht, die sich an diesen Adressen befinden und somit indirekt wieder zurückgegeben….(auch wenn das ja eigentlich nicht geht).
Frage 3: Was ist nun der Unterschied zwischen dem Referenzoperator und dem Dereferenzoperator. Oder anders gefragt: Was ist der Unterschied zwischen „String &x“ und „String *x?“
Vielen Dank für eure Hilfe
lg, freakC++
-
Frage 1: Die erste Methode kopiert die beiden Stringobjekte in zwei neue, die als Argument für ExChange () dienen. Deshalb bekommt die aufrufende Einheit die Vertauschung nicht mit. Im zweiten Beispiel übergibst Du Referenzen (die Adressen) der Originalobjekte, so wirken sich die Änderungen auf die Originale sich aus.
-
freakC++ schrieb:
Frage 3: Was ist nun der Unterschied zwischen dem Referenzoperator und dem Dereferenzoperator. Oder anders gefragt: Was ist der Unterschied zwischen „String &x“ und „String *x?“
Google mal nach c++ pointer vs referenz