Zeiger als Parameter
Auch eine Funktion kann einen Zeiger bekommen. Sie hat dann die Adresse einer Variablen und kann die Variable über * ändern. So übergeben Programme in C Variablen an Funktionen: C++ ist aus der Sprache C entstanden, die keine Referenzen hat. Deshalb wirst du diesen Stil in älterem Code und in vielen Bibliotheken sehen:
#include <iostream>
void fuegePunktHinzu(int* punkte) {
*punkte = *punkte + 1;
}
int main() {
int punktestand = 10;
fuegePunktHinzu(&punktestand);
std::cout << "Punktestand: " << punktestand << std::endl;
return 0;
}Das gibt aus:
Punktestand: 11Vergleiche es mit der Funktion fuegePunktHinzu von der ersten Seite der Lektion, die den Parameter int& punkte hatte. Jetzt hat der Parameter den Typ int*, in der Funktion schreibst du davor ein *, und der Aufruf übergibt eine Adresse: fuegePunktHinzu(&punktestand). Der Vorteil ist, dass schon der Aufruf zeigt, dass die Funktion punktestand ändern darf. Der Nachteil sind mehr Zeichen und mehr Möglichkeiten für Fehler.
Häufige Fehler:
- Ein Aufruf ohne
&,fuegePunktHinzu(punktestand), endet mit dem Fehlerno matching function for call to 'fuegePunktHinzu'und der Notecandidate function not viable: no known conversion from 'int' to 'int *' for 1st argument; take the address of the argument with &. Der Compiler sagt dir sogar, was du tun sollst: die Adresse mit&übergeben. - Umgekehrt, wenn eine Funktion eine Referenz will und du ihr eine Adresse übergibst, endet die Note mit
remove &. - Vergisst du in der Funktion das Sternchen und schreibst
punkte = punkte + 1;, lässt sich das Programm ohne Fehler kompilieren, ändert aber die im Zeiger gespeicherte Adresse, nicht den Punktestand. Die Variablepunktestandbleibt10.
So schreibst du es:
Anweisungen
- 1
In einem Spiel kannst du ein Leben für 100 Münzen kaufen. Schreibe anstelle des ersten Kommentars eine Funktion
kaufeLebenmit zwei Parametern vom Typint*: den Zeigernlebenundmuenzen. Über die Zeiger zieht die Funktion 100 Münzen ab und addiert ein Leben. - 2
Rufe in
mainanstelle des Kommentars vor der ersten AusgabezeilekaufeLebenauf und übergib die Adressen der Variablenlebenundmuenzen. Das Programm gibt zweimalLeben: 4, Münzen: 50aus. - 3
Du kannst nur dann ein Leben kaufen, wenn du mindestens 100 Münzen hast. Füge der Funktion eine Bedingung hinzu: Hat der Spieler weniger als 100 Münzen, ändert die Funktion nichts und gibt
Nicht genug Münzenaus. Rufe dannkaufeLebenein zweites Mal auf, anstelle des letzten Kommentars. Das Programm gibtLeben: 4, Münzen: 50, dannNicht genug Münzenund dann noch einmalLeben: 4, Münzen: 50aus.