Zeigervariablen
Eine Adresse ist ein Wert, genau wie eine Zahl. Du kannst sie also in einer Variablen speichern. Eine Variable, die eine Adresse speichert, heißt Zeiger: Sie zeigt auf eine andere Variable, das heißt, sie sagt dir, wo diese Variable ist.
int alter = 15;
int *p = &alter;Lies die zweite Zeile so: „p ist ein Zeiger auf einen int und enthält die Adresse von alter“. Wir sagen, dass p auf alter zeigt. Das * in der Deklaration sagt, dass p ein Zeiger ist. Das int davor sagt, was für ein Wert in dem Kästchen liegt, auf das er zeigt.
Der Typ von p ist also int *, „Zeiger auf int“. Ein Zeiger auf ein double hat den Typ double *, und ein Zeiger auf ein char hat den Typ char *. Kurze Namen wie p sind für Zeiger in kleinen Beispielen üblich. C stören die Leerzeichen um das * nicht: int *p, int* p und int * p bedeuten dasselbe. In diesem Kurs schreiben wir int *p.
Ein Zeiger ist auch eine Variable, hat also sein eigenes Kästchen mit seiner eigenen Adresse. In seinem Kästchen liegt aber nicht die 15. Dort liegt die Adresse von alter. Wenn du p mit %p ausgibst, bekommst du dieselbe Zahl wie für &alter:
#include <stdio.h>
int main(void) {
int alter = 15;
int *p = &alter;
printf("Adresse von alter: %p\n", &alter);
printf("Wert von p: %p\n", p);
return 0;
}Das gibt aus:
Adresse von alter: 0xfffc
Wert von p: 0xfffcHäufige Fehler:
int *p = alter;ohne&endet mit dem Fehlerincompatible integer to pointer conversion initializing 'int *' with an expression of type 'int'; take the address with &. Ein Zeiger enthält eine Adresse, keine Zahl wie 15. Das Ende der Meldung sagt dir sogar die Lösung: die Adresse mit&nehmen („take the address with &“).- Der Typ des Zeigers muss zum Typ der Variablen passen. Nach
double preis = 9.5;endet die Zeileint *p = &preis;mit dem Fehlerincompatible pointer types initializing 'int *' with an expression of type 'double *'. Die Adresse einesdoublegehört in einendouble *.
So schreibst du es:
Anweisungen
- 1
Lege unter der Variablen
preiseinen Zeigerpvom Typint *an, der auftemperaturzeigt. - 2
Gib am Ende des Programms (vor
return 0;) den Wert vonpmit%paus: den TextWert von p:undp. Es ist dieselbe Adresse wie in der ersten Zeile der Ausgabe. - 3
Lege unter dem Zeiger
peinen zweiten Zeigerqan, der aufpreiszeigt (qist ein üblicher Name für einen zweiten Zeiger, weil es im Alphabet nachpkommt). Wähle seinen Typ selbst: Was für einen Wert enthältpreis? Gib dann am Ende des Programms (vorreturn 0;)Wert von q:undqaus.