Ein Zeiger (engl. Pointer) ist in der Informatik ein Verweis auf eine Adresse im Speicher.
Erklärung
Du kannst dir den Zeiger in der Informatik wie einen Uhrzeiger vorstellen:
Der Zeiger bei der Uhr zeigt auf die jeweilige Uhrzeit.
Der Zeiger in der Informatik zeigt auf eine Adresse im Speicher.
Das ist auch schon das grobe Prinzip eines Zeigers.
Ein Zeiger referenziert, verweist oder zeigt auf einen Platz im Hauptspeicher, in dem zum Beispiel Objekte oder Variablen gespeichert sein können.
Um an diese gespeicherten Daten zu gelangen, wird dann einfach wieder dereferenziert.
Zeiger werden beispielsweise bei dynamischen Datenstrukturen, wie der Liste, verwendet.
Um dir besser vorstellen zu können, was genau diese Zeiger eigentlich tun, schau dir folgende Tabelle an:
Adresse | Inhalt | Variable |
---|---|---|
1 | 4 | a |
2 | 9 | b |
3 | 7 | c |
Um den Inhalt einer Variablen zu speichern, wird dieser an einer bestimmten Adresse im Speicher gespeichert.
Die Variable zeigt dann auf diese Speicheradresse, an dem der Inhalt der Variablen gespeichert wurde.
Schau dir zum Verständnis die 1. Zeile an:
Die Variable a zeigt auf die Speicheradresse 1, an der die Zahl 4 gespeichert wurde.
Du kannst auch mithilfe eines neuen Zeigers auf eine schon gefüllte Adresse im Speicher zugreifen. Schau dir dafür die folgende Tabelle an:
Adresse | Inhalt | Variable |
---|---|---|
1 | 5 | a |
2 | 1 | b |
3 | 4 | c |
Variable b hat hier die Adresse 1 als Inhalt. Dadurch ist der tatsächliche Inhalt von b die 5.
b hat also denselben Inhalt wie a, da beide Variablen auf dieselbe Adresse im Speicher zeigen.
Ändert sich also der Inhalt von a, dann ändert sich automatisch auch der Inhalt von b.
Nutzungskontext
Zeiger werden beispielsweise verwendet, um dynamische Speicher zu verwalten.
So kann man dynamische Datenstrukturen, wie verkettete Listen, mithilfe von Zeigern einfach umsetzen.
Vor allem in den Programmiersprachen C, C++, oder Assembler sind Zeiger extrem wichtige Konzepte.
In der Programmiersprache Java wird das Konzept der Referenzen angewendet. Diese funktionieren ähnlich wie Zeiger.
Zeiger werden jedoch in den Programmiersprachen unterschiedlich eingesetzt.
Arten von Zeigern
Die wichtigsten Zeiger sind:
Null-Zeiger:
- Zeiger zeigt ins Nichts.
- Werden gerne verwendet, um eine Leerstelle zu kennzeichnen.
- Beispiel: Werden bei Listen eingesetzt, um zu zeigen, dass kein weiterer Knoten folgt.
Typisierter Zeiger:
- Zeiger ist mit einem Datentyp verknüpft.
- Beispiel: Ein Integer-Zeiger kann nur auf ein Objekt mit dem Typ Integer zeigen.
Untypisierter Zeiger:
- Zeiger ist nicht mit einem Datentyp verknüpft.
- Sie können nicht dereferenziert, inkrementiert oder dekrementiert werden.
- Sie müssen vor dem Zugriff in einen typisierten Zeigertyp umgewandelt werden.
Uninitialisierte Zeiger:
- Zeiger, der dereferenziert wird, ohne auf einen gültigen Speicherbereich des entsprechenden Typs zu zeigen.
Vor- und Nachteile
Vorteile | Nachteile |
---|---|
Können Programmablauf beschleunigen. | Kompliziert |
Können Speicherplatz sparen. | Fehleranfällig |
Beispiel
Schau dir die folgende Tabelle an:
Adresse | Inhalt | Variable |
---|---|---|
1 | 4 | a |
2 | 1 | b |
3 | 2 | c |
- a zeigt auf die Speicheradresse 1 und hat den Inhalt 4.
- b zeigt auf die Speicheradresse 2 und hat als Inhalt die Speicheradresse von a, also hat b den Inhalt 4.
- c zeigt auf die Speicheradresse 3 und hat als Inhalt die Speicheradresse von b, wobei wir ja schon wissen, dass b den Inhalt 4 hat, weswegen auch c den Inhalt 4 hat.