Verständnisfrage zu Referenzen
-
Hi,
kann man Referenzen einfach so an andere Funktionen als Parameter weitergeben ?
Z.B. was ich hier mit Zeiger auf die Adresse mache
int F1( int *a, int *b ) { int r; r = F2( *&a, *&b ); return( r ); } int F2( int *a, int *b ) { return( *a + *b ); }kann ich hier einfach so als Referenz weitergeben ?
int F1( int &a, int &b ) { int r; r = F2( a, b ); return( r ); } int F2( int &a, int &b ) { return( a + b ); }Also es funktioniert bei diesem kleinen Beispiel, aber ich bin mir nicht sicher ob das so richtig ist

-
Ja, allerdings macht es nicht viel Sinn, an eine Funktion eine Referenz zu übergeben, wenn die Funktion den Parameter nicht verändert. Dann eher eine Referenz auf ein konstantes Objekt (Const-Reference).
Die Operatoren kannst du hier übrigens weglassen, die heben sich sowieso auf.
r = F2( *&a, *&b );
-
geht - aber besser, du machst die referenzen konstant, wenn du den wert "dahinter" nicht änderst:
int F2(const int &a, const int &b)bb
ps:
r = F2( *&a, *&b );
fällt dir da evtl was (unsinniges) auf? ^^return( r );
die klammern bei nem return zählen zwar bestimmt mit zum geschmack, aber ich kenn eigtl niemanden, der sowas schreibt... sieht auch ein wenig hässlich aus
-
Vielen Dank für eure Hilfe.
Nexus schrieb:
Ja, allerdings macht es nicht viel Sinn, an eine Funktion eine Referenz zu übergeben, wenn die Funktion den Parameter nicht verändert. Dann eher eine Referenz auf ein konstantes Objekt (Const-Reference).
Ja das war nur ein kleines Beispiel, aber in dem eigentlichen Programm wird in F2 ein int gebraucht der über F1 von main() durchgereicht wird (um die globale Variable zu vermeiden).
Nexus schrieb:
Die Operatoren kannst du hier übrigens weglassen, die heben sich sowieso auf.
r = F2( *&a, *&b );Hm, da hab ich wohl noch nicht so den Blick für ? Das ist doch ein Zeiger auf eine Adresse. Was hebt sich denn da auf

-
ja, es ist ein zeiger auf eine adresse... genau das ist ja der grund, warum sich das aufhebt...
int a; int *adresse = &a; //wo ist a gespeichert? int pointer_auf_adresse b = *adresse; //was steht dort, wo a gespeichert ist? if (b != a) { //unerreichbarer code }jz besser?
bb
-
Danke, jetzt hab ich es auch verstanden
