Über einen Zeiger ändern
*p ist nicht nur zum Lesen da. Es steht für die Variable selbst, also kannst du ihm auch etwas zuweisen. *p = 20; speichert 20 in dem Kästchen, auf das p zeigt:
#include <stdio.h>
int main(void) {
int alter = 15;
int *p = &alter;
*p = 20;
printf("alter: %d\n", alter);
*p += 1;
printf("alter: %d\n", alter);
return 0;
}Das gibt aus:
alter: 20
alter: 21Das Programm schreibt nie alter = ..., und doch hat sich alter geändert. alter und *p sind zwei Wege zum selben Kästchen. *p funktioniert also überall, wo alter funktionieren würde: *p = *p * 2;, *p -= 3;.
Vorsicht mit ++: Schreibe *p += 1; oder (*p)++;. Ohne die Klammern addiert *p++; 1 zum Zeiger selbst (es rückt ihn zum nächsten Kästchen) und ändert alter nicht, und kein Fehler sagt dir das.
Ohne den Stern änderst du den Zeiger selbst, also wohin er zeigt. Auch das ist nützlich. In diesem Spiel zeigt der Zeiger spieler immer auf die Punkte des Spielers, der gerade an der Reihe ist:
int anna = 0;
int jonas = 0;
int *spieler = &anna;
*spieler += 5;
spieler = &jonas;
*spieler += 3;
printf("Anna: %d, Jonas: %d\n", anna, jonas);Das gibt aus:
Anna: 5, Jonas: 3spieler = &jonas; ohne Stern lässt spieler auf eine andere Variable zeigen. *spieler += 3; mit Stern ändert die Variable, auf die er jetzt zeigt, jonas.
Merke dir also: *p = ... mit Stern ändert den Wert im Kästchen. p = ... ohne Stern ändert, wohin p zeigt, und braucht eine Adresse. Wenn du bei *p = 20; den Stern vergisst, endet die Zeile p = 20; mit dem Fehler incompatible integer to pointer conversion assigning to 'int *' from 'int': Du versuchst, die Zahl 20 in den Zeiger selbst zu legen.
So schreibst du es:
Anweisungen
- 1
Lege unter den Variablen (über dem
printf) einen Zeigerpan, der auflebenzeigt. Setze darunter die Leben über den Zeiger auf5:*p = 5;. Schreibe nichtleben = 5;. Das Programm gibtLeben: 5, Schilde: 1aus. - 2
Addiere darunter (immer noch über dem
printf) 2 weitere Leben, wieder über den Zeiger. Das Programm gibtLeben: 7, Schilde: 1aus. - 3
Jetzt soll der Zeiger auf die Schilde zeigen. Lass
pam Ende des Programms (vorreturn 0;) auf die Variableschildezeigen. - 4
Addiere darunter 1 Schild über den Zeiger und gib die Zeile mit den Leben und Schilden noch einmal auf dieselbe Weise aus. Das Programm gibt
Leben: 7, Schilde: 1und dannLeben: 7, Schilde: 2aus.