Zwei Ergebnisse auf einmal
Mit return gibt eine Funktion nur einen Wert zurück. Manche Berechnungen haben aber zwei Ergebnisse. Zum Beispiel sind 135 Minuten 2 Stunden und 15 Minuten: zwei Zahlen. Mit Zeigern kann eine Funktion so viele Ergebnisse, wie sie braucht, in den Variablen des Aufrufers speichern:
#include <stdio.h>
void zeit_zerlegen(int gesamt_minuten, int *stunden, int *minuten) {
*stunden = gesamt_minuten / 60;
*minuten = gesamt_minuten % 60;
}
int main(void) {
int stunden = 0;
int minuten = 0;
zeit_zerlegen(135, &stunden, &minuten);
printf("%d h %d min\n", stunden, minuten);
return 0;
}Das gibt aus:
2 h 15 minDie Funktion liest den ersten Parameter nur, also ist er ein gewöhnlicher int, und du kannst ihr eine Zahl übergeben. In die anderen beiden schreibt sie, also sind sie Zeiger, und du musst ihnen die Adressen von Variablen übergeben. Solche Parameter heißen Ausgabeparameter: Die Funktion liest sie nicht, sie füllt sie aus. Die Sterne in der ersten Zeile der Funktion sagen dir, welche Parameter Ergebnisse sind.
Die Variablen stunden und minuten müssen vor dem Aufruf existieren. Hier beginnen sie bei 0, und die Funktion überschreibt sie. Wenn du die Funktion mit denselben Variablen noch einmal aufrufst, überschreibt sie sie wieder. Und wie immer endet das Kompilieren mit einem Fehler, der take the address with & sagt, wenn du im Aufruf das & vergisst.
So schreibst du es:
Anweisungen
- 1
Schreibe anstelle des Kommentars eine Funktion
verteilenmit vier Parametern:bonbonsundkindervom Typint, die sie nur liest, und die Zeigerjedesundrestvom Typint *, in denen sie die Ergebnisse speichert. Die Funktion verteilt die Bonbons auf die Kinder: Jedes Kind bekommtbonbons / kinderBonbons, undbonbons % kinderbleiben übrig. - 2
Lege in
mainunter demprintfdie Variablenjedesundrestmit dem Wert0an. Rufeverteilenmitbonbons,kinderund den Adressen der beiden neuen Variablen auf. Gib dannJedes Kind: 3, Rest: 2aus, mit%dfür beide Zahlen. - 3
Noch ein Kind kommt dazu. Addiere unter dem letzten
printf1 zukinder, rufeverteilenmit denselben Variablen noch einmal auf und gib das Ergebnis auf dieselbe Weise aus. Das Programm gibtJedes Kind: 2, Rest: 5aus.