Zwei Variablen tauschen
Die Werte zweier Variablen zu tauschen ist eine häufige Aufgabe in der Programmierung, zum Beispiel beim Sortieren. Beginnen wir in main, ohne Funktion. Zuerst sieht es einfach aus:
int a = 3;
int b = 8;
a = b;
b = a;
std::cout << a << " " << b << std::endl;Das gibt aus:
8 8Die Anweisung a = b; hat den ursprünglichen Wert von a, die 3, überschrieben, und er ging verloren. Es ist, als wolltest du die Getränke in zwei vollen Gläsern tauschen: Du brauchst ein drittes, leeres Glas. In einem Programm ist dieses Glas eine Hilfsvariable, in der du zuerst den ursprünglichen Wert von a speicherst:
int a = 3;
int b = 8;
int zwischen = a;
a = b;
b = zwischen;
std::cout << a << " " << b << std::endl;Das gibt aus:
8 3Eine Funktion macht es genauso, muss aber beide Variablen des aufrufenden Codes ändern. Beide Parameter sind also Referenzen. Wäre einer davon keine Referenz, würde die Funktion nur ihre Kopie ändern, und das Tauschen würde nicht funktionieren. Die Standardbibliothek hat auch eine fertige Tauschfunktion, std::swap(a, b) (aus der Bibliothek <utility>). Jetzt weißt du, wie sie innen funktioniert.
Referenzen können noch etwas: Über sie kann eine Funktion mehrere Ergebnisse zurückgeben, während return nur einen Wert zurückgibt. Diese Funktion verteilt Bonbons an Kinder und speichert in zwei Referenzen, wie viele jedes Kind bekommt und wie viele übrig bleiben:
#include <iostream>
void verteile(int bonbons, int kinder, int& jedes, int& rest) {
jedes = bonbons / kinder;
rest = bonbons % kinder;
}
int main() {
int jedes = 0;
int rest = 0;
verteile(17, 5, jedes, rest);
std::cout << "Jedes Kind: " << jedes << ", Rest: " << rest << std::endl;
return 0;
}Das gibt aus:
Jedes Kind: 3, Rest: 2Die Funktion liest nur die ersten beiden Parameter, es sind also gewöhnliche Parameter, und du kannst ihnen Zahlen übergeben. In die letzten beiden schreibt sie, es sind also Referenzen, und du musst ihnen Variablen übergeben.
So schreibst du es:
Anweisungen
- 1
Schreibe anstelle des ersten Kommentars eine Funktion
tauscheWerte, die zwei Referenzen aufintbekommt und ihre Werte tauscht. - 2
Rufe in
main, anstelle des Kommentars zwischen den beiden Ausgabezeilen,tauscheWerteauf und übergib die Variablenersterundzweiter. Das Programm gibt3 8und dann8 3aus. - 3
Schreibe unter
tauscheWerteeine FunktionsortierePaar, die ebenfalls zwei Referenzen aufintbekommt. Enthält der erste Parameter eine größere Zahl als der zweite, ruft sietauscheWerteauf, um sie zu tauschen. So hat der erste Parameter am Ende immer die kleinere Zahl. Du kannst Referenzen weitergeben:tauscheWerteinsortierePaarändert die Variablen ausmain. Rufe anstelle des letzten KommentarssortierePaar(x, y)auf. Die letzte Zeile der Ausgabe ist dann4 9.