Zeiger
aus www.iwiki.de, der freien Wissensdatenbank
Zeiger ist ein elementarer Datentyp, deren Variablen eine Arbeitsspeicheradresse abspeichern.
Inhaltsverzeichnis |
Maschinennahe Sprachen gegen Hochsprachen
Der Arbeitsspeicher bestehet aus einzelnen Zellen, die meistens 1 Byte groß sind. Im Prinzip ist jede Zelle direkt adressierbar und kann direkt gelesen oder geschrieben werden.
Maschinennahe Sprachen lassen solche Operationen zu. Das Problem dabei ist, dass man z.B. auf eine Zelle, wo ein Befehl gespeichert ist, zugreifen kann. Ein anderes Problem ist, der Zugriff auf die Variablen, die mehr als 1 Byte belegen. Man soll in dem Fall den kompletten Wert auslesen oder schreiben. Die beide Problemme können dazu führen, dass das Program sich nicht korrekt verhält.
Hochsprachen versuchen diese Problemme verhindern, indem alle Zeigeroperationen kontrolliert werden. Dabei werden Zeiger auf Referenztypen eingefügt. Die Eingabe des Types wird schon bei der Deklaration der Zeigervariablen gemacht. Durch diese Eingabe ist der Compiler in der Lage, bei Zugriffsoperationen den Typ zu prüfen. Falls man einen Zeiger auf Integer hat, dann kann man keine Adresse dem Zeiger zuweisen, wo ein Realwert gespeichert ist. Der Compiler/Interpreter von Hochsprachen kontrolliert außerdem, ob die zugewisene Adresse der Anfang einer Variable ist. Das garantiert, dass die Werte immer vom Anfang gelesen bzw. geschrieben werden.
Für zeiger sind folgende Operationen zugelassen:
- Wertzuweisung an die Zeigergröße
- Zugriff auf die referenzierte Größe
- Ungültigmachen des Zeigerinhaltes
- Freigabe des referesnzierten Speicherbereiches
Wertzuweisung an die Zeigergröße
Mit dieser Operation wird eine reale Arbeitsspicheradresse in eine Zeigergröße gespeichert. Es gibt drei Varianten dieser Operation:
Mit der Adresse einer benanten Größe
In dem Fall muss man eine benannte Variable deklarieren. Dadurch wird bestimmte Arbeitsspeicherbereich reserviert. Die Anfangsadresse diesen Bereiches wird später ermitteln und in einem Zeiger gespeichert.
Mit der Adresse einer neuen, nicht benannten Größe
Bei der Variante sind zwei Operationen notwendig
- Ein Speicherbereich muss reserviert werden. Dabei ist besonders die Größe des Bereiches zu beachten.
- Die Adresse des Bereiches muss in einer Zeigervariable gesichert werden. Falls das nicht gemacht wird, bleibt die Speicher unbenutzt, man kann weder darauf zugreifen noch später freigeben.
Durch Kopieren des Inhaltes einer Zeigergröße
Man kann eine Adresse aus einer Zeigervariable in eine andere Zeigervariable von dem selben Referenztyp kopieren. In dem Fall sind die Zugriffe durch die beide Zeigergröße identisch.
Zugriff auf die referenzierte Größe
In dem Beispiel hat man eine Zeigervariable X. Mit Hilfe von dieser Variable kann man sowohl den wert 13680 als auch 3,141592 bekommen. Den ersten Wert kann direkt bekommen werden. Um auf den Wert 3,141592 zu zugreifen, muss man auf den referenzierten Speicherbereich zugreifen. Syntaktisch wird es in verschiedenen Sprachen unterschiedlich gemacht. Wenn man das Sprachenunabhängig machen will, kann man den Wert 3,141592 als X_ref bezeichnen.
Ungültigmachen eines Zeigerinhaltes
Der Inhalt einer Zeigergröße ist eine Arbetsspeicheraresse. Das ist nicht immer möglich gültige Adresse zuzuweisen. Es kann sein das es auch nicht gewünscht ist. In solchen Fällen wird der Inhalt der Zeigerfröße als „ungultig“ gekenzeichnet, z.B. zeiger_auf_real = NULL
Freimachen des referenzierten Speicherbereiches
Falls im Programm ein Speicherbereich nicht mehr benötigt wird, soll der Bereich für weitere nutzung freigegeben werden. Nach der Freigabe müssen alle Zeigergröße, die den Bereich referinziert haben, ungültig gemacht werden.

