Zusammenfassung
In dieser Lektion hast du gelernt:
- Jede Variable liegt im Speicher und hat eine Adresse.
&xist die Adresse der Variablenx, und%pgibt sie aus. - Ein Zeiger ist eine Variable, die eine Adresse enthält:
int *p = &x;. Sein Typ sagt, worauf er zeigt:int *,double *,char *. *pist der Wert, auf denpzeigt (Dereferenzieren). Du kannst ihn lesen,printf("%d\n", *p);, und ändern,*p = 20;. Ohne den Stern ändertp = &y;, wohin der Zeiger zeigt.- In einer Deklaration macht
*einen Zeiger. Vor einem Zeiger holt es den Wert von der Adresse. Zwischen zwei Werten multipliziert es.&und*sind Gegenstücke. - Eine Funktion mit einem Zeigerparameter kann die Variable des Aufrufers ändern:
void bonus_addieren(int *punkte, int bonus), aufgerufen alsbonus_addieren(&punktestand, 5). Ein vergessenes&im Aufruf ist ein Kompilierfehler; ein vergessenes*in der Funktion ist ein Fehler ohne Fehlermeldung. - Über Zeiger kann eine Funktion zwei Variablen tauschen oder mehrere Ergebnisse auf einmal zurückgeben (Ausgabeparameter).
- Der Name eines Arrays ist die Adresse seines ersten Elements, also funktionieren
int *p = zahlen;undp[1]. Ein Parameterint zahlen[]ist ein Zeiger, genau wieint *zahlen. Deshalb ändert eine Funktion das Array des Aufrufers und braucht seine Anzahl. NULList ein Zeiger, der nirgendwohin zeigt. Eine Funktion, die einen Zeiger zurückgibt, etwa die Adresse eines gefundenen Elements, gibtNULLzurück, wenn es keins gibt. Prüfe einen Zeiger, derNULLsein kann, bevor du ihn verwendest:if (p != NULL). Das Lesen überNULLstoppt das Programm hier mitRuntimeError: unreachable.const int *zahlenist ein Zeiger, über den die Funktion nur liest. Text in Anführungszeichen bekommt einen Zeigerconst char *:const char *name = "Anna";.
In der nächsten Lektion, über Strukturen, lernst du, zusammengehörige Werte, etwa den Namen und die Punkte eines Schülers, in einer Variablen zusammenzufassen. Auch dort sind Zeiger nützlich.
So schreibst du es:
Anweisungen
- 1
Üben wir. Das Array
punkteenthält die Ergebnisse eines Tests, und die Lehrerin addiert zu jedem einen Bonus. Schreibe übermaineine Funktionbonus_addierenmit den Parameternint *punkte,int anzahlundint bonus. Sie addiert den Bonus zu jedem Ergebnis, aber kein Ergebnis darf über 100 Punkte kommen: Ein höheres wird zu 100. Rufe sie vor der Schleife mit dem Bonus10auf. Das Programm gibt55,82,100,48und76aus, eins pro Zeile. - 2
Schreibe unter
bonus_addiereneine Funktionfinde_min_maxmit den Parameternconst int *punkte,int anzahl,int *niedrigsteundint *hoechste. Über die beiden Zeiger speichert sie das niedrigste und das höchste Ergebnis, gibt also zwei Ergebnisse auf einmal zurück. Beginne damit, das erste Element in beiden zu speichern. Lege am Ende vonmainzwei Variablen an, übergib ihre Adressen an die Funktion und gib sie aus:Niedrigste: 48, höchste: 100.