C Handbuch bestellen

Das C Tutorial (deutsch)

Zeiger in C

Stelle dir vor, dass du mit Begeisterung Klavier spielst. Mit der Zeit bemerkst du, wie sich die Töne immer schiefer anhören. Du entschließt dich, das Klavier von deinem Freund Kurt stimmen zu lassen - Kurt kennt sich damit gut aus. Da man das Klavier nicht gut transportieren kann, gibst du Kurt Bescheid, dass er doch bitte zu dir kommen soll. Du schreibst ihm also einen Brief, der auch eine genaue Wegbeschreibung zu deinem Wohnort enthält. Die Wegbeschreibung benötigt Kurt, da er  bekanntlich viel verreist und jedesmal aus einer anderen Richtung zu dir kommt.

In dem Beispiel sollen zwei Tatsachen herausstechen. Zum Einen lässt sich das Klavier nicht wirtschaftlich transportieren, bei der Tatsache dass es nur gestimmt werden soll. Zum Anderen benötigt Kurt eine Wegbeschreibung, um zu dem Klavier zu gelangen.

In der Programmierung haben wir ähnliche Probleme. Zum Beispiel arbeiten wir später mit großen Datenmengen, welche von Funktionen bearbeiten werden. Würden wir diese Datenmengen als Paket zu den Funktionen transportieren, geht dies sehr stark zu Lasten der Performance und des Speicherplatzes. Um dem vorzubeugen, verwenden wir Zeiger.

  • Das Klavier ist im Prinzip unsere Datenmenge
  • Die Wegbeschreibung ist im Prinzip unser Zeiger

Unsere Datenmengen liegen im Speicher und haben eine Adresse. Ein Zeiger "zeigt" auf die Menge, indem er lediglich die Adresse der Menge speichert. Wenn wir dann einer Funktion unsere Datenmenge überliefern möchten, teilen wir ihr lediglich mit dem Zeiger die Adresse mit. Die Datenmenge wird somit nicht transportiert, stattdessen greift die Funktion über die Adresse auf die Daten zu. Diese Datenmengen werden durch Variablen repräsentiert. Ein Zeiger speichert also nur die Adresse einer anderen Variablen und leitet somit die Anfrage auf einen Wert weiter.

In den nächsten Kapiteln werden wir erfahren, wie man theoretisch mit einer einzigen Variablen den kompletten Speicherplatz des Computer belegen kann. Hier folgt jetzt aber erstmal ein kleines Beispiel zum Thema Zeiger.

Beispiel mit Zeiger

Wir erstellen zuerst eine Variable und setzen sie auf einen Wert. Danach erstellen wir einen Zeiger, der auf die Variabel zeigen soll. Ein Zeiger sollte vom gleichen Datentyp sein, wie die Variable, auf die er zeigt. Einen Zeiger erstellen wir, indem wir bei der Deklaration den Namen mit einem Stern * beginnen. Danach existiert dieser Zeiger, allerdings zeigt er auf keinen sinnvollen Wert. Wir müssen ihn also noch auf die Adresse der Variablen setzen. Diese erhalten wir mit dem Kaufmanns-Und &.

int zahl = 7;
int *zeiger;
zeiger = &zahl;
printf("Zeiger-Wert: %d\n", *zeiger);
Zeiger-Wert: 7

Ein Zeiger repräsentiert eine Adresse und nicht wie eine Variable einen Wert. Will man auf den Wert der Adresse zugreifen, auf die ein Zeiger zeigt, muss der Stern * vor den Namen gesetzt werden.

Zeiger