call by referece... Funktion Verständnisfrage
-
habe da ne verständnisfrage. über den rückgabewerte im folgenden beispielprogramm:
----------------------------------------------
#incl.....void swap (int& a, int& b)
{
int temp =a;
a=b;
b=temp;
}int main(){
int x=1; int y=2;
swap (x,y); //laut buch: tauscht die funktion x mit y und umgekehrt.
}
-----------------------------------------------aber durch das VOID swap gibt es doch keinen Rückgabewert und dadurch ist auch die gültigkeit von a und b nur auf die funktion limitiert.
soweit ich weiß(liege bestimmt falsch), sollte man doch nur in einer void funktion, sachen wie cout/cin und schleifen, die sich nur auf die funktion beziehen, gebrauchen.
könnte mir bitte jemand weiter helfen. vielen dank für eure hilfe!
-
Da Du die Parameter per Referenz übergibst, kannst Du in der Funktion swap
die Werte von x und y (hier durch a und b) ändern.
Würdest Du eine Kopie übergeben, dann hätte die swap-Funktion keine Auswirkung
auf Dein x und y.
Zusätzlich kannst Du einen Rückgabewert verwenden, da kannst Du aber nur ein
POD/Objekt zurückgeben. Da ein Rückgabewert hier nicht benötigt wird, gibt die
Funktion nichts zurück.Schau mal in Deinem Buch nach Referenzen.
-
-
siehe auch hier
http://tutorial.schornboeck.net/referenzen.htm
http://www.ica1.uni-stuttgart.de/Courses_and_Lectures/C++/script/node9.html#SECTION00334300000000000000
-
tobiknoh schrieb:
soweit ich weiß [...], sollte man doch nur in einer void funktion, sachen wie cout/cin und schleifen, die sich nur auf die funktion beziehen, gebrauchen.
Was sollte der tiefere Sinn dieser "Regel" sein? Die Regel ist vielmehr, Benutzerinteraktion von Berechnungen zu trennen. Schreibst Du eine Funktion, die die Dateneingabe des Benutzers übernimmt, wirst du die IO-Streams verwenden - egal was für einen Rückgabetyp die Funktion hat. Schreibst du eine Funktion, die Berechnungen durchführt, sind Ausgaben (außer evtl. zum Debuggen) und Eingaben darin fehl am Platz.
cheers, Swordfish