Zeiger - also, eine Variable, die mit dem POINTER-Attribut versehen wurde - sind, wie bereits erwähnt, keine Variablen im eigentlichen Sinne. Sie dienen nicht zur Aufnahme von Rechendaten, sondern bieten dem Programmierer die Möglichkeit, Adressen im Arbeitsspeicher anzusprechen. Man sagt, sie zeigen darauf. Ist das Ziel eines Zeigers gesetzt worden, kann mit dem zugeordneten Speicherbereich gearbeitet werden, wie bei allen anderen Variablen auch. Es können Werte abgelegt, verändert und ausgelesen werden.
Unter Fortran95 gibt es für einen Zeiger zwei Möglichkeiten eine Speicheradresse festgelegt zu bekommen. Zum einen kann ein Zeiger auf eine Adresse zeigen, die bereits einer anderen Variablen zugeordnet ist, zum anderen kann ihm aber auch ein eigener (und somit zuvor freier) Speicherplatz zugewiesen werden.
Zeiger auf eine Variable
Ein Zeiger kann nur auf eine andere Variable zeigen, wenn für diese
das TARGET-Attribut gesetzt, sie also als Zeigerziel deklariert wurde.
Die Zuweisung der Variable als Ziel erfolgt dann mit Hilfe einer
Zeigerzuweisungs-Anweisung ().
Beispiel: REAL, TARGET :: zahl ! ein REAL-Variable, die Zeigerziel sein kann REAL, POINTER :: zeigaufzahl ! ein Zeiger auf eine Variable vom Typ REAL zahl = 0. zeigaufzahl => zahl ! 'zeigaufzahl' soll 'zahl' als Ziel haben PRINT*, zeigaufzahl ! gibt '0.' auf dem Bildschirm aus zeigaufzahl = 7.3 PRINT*, zahl ! gibt '7.3' auf dem Bildschirm aus
In unserem Beispiel haben wir eine REAL-Größe namens
deklariert, die auch das TARGET-Attribut besitzt. Somit kann
auch als Ziel eines Zeigers benutzt werden. Der Zeiger
zeigaufzahl ist auch vom Typ REAL, und kann somit als Zeiger auf
REAL-Größen verwendet werden. Mit
haben wir
als Ziel von zeigaufzahl festgelegt. Somit zeigt zeigaufzahl
auf zahl. Als wir den Wert von zeigaufzahl auf
gesetzt haben,
hat sich dadurch auch der Wert von zahl auf
geändert,
da beide symbolische Namen die gleiche Adresse im Speicher ansprechen.
Um den Zeiger von seinem Zeigerziel wieder zu trennen, kann die Anweisung
verwendet werden. Jedoch würde jede Neuzuordnung eines Zeigers zu einem Ziel bereits implizieren, daß die vorangegangene Zuordnung damit aufgehoben ist.
Zeiger auf eigenen Speicherplatz
Ähnlich wie bei dynamischen Feldern kann die Vergabe von Speicher an Zeiger gesehen werden. Daher ist es auch nicht weiter verwunderlich, daß hierbei auch nahezu die gleichen Anweisungen verwendet werden. Mit
kann einem Zeiger (oder auch mehreren gleichzeitig) Speicherplatz zugewiesen werden. Dabei wird dem Zeiger abhängig von seinem Typ Speicher zugeteilt und kann anschließend wie eine gewöhnliche Variable dieses Typs behandelt werden. Die korrekte Abbarbeitung der Anweisung kann wie bei den dynamischen Felder unter 4.2.3.5 abgefragt werden.
Um den Speicherplatz eines Zeigers wieder freizugeben verwendet man auch hier die Anweisung
.
Um den Zuordungsstatus eines Zeigers zu erfragen existiert die vordefinierte Funktion ASSOCIATED(zeiger), die TRUE als Rückgabewert liefert, falls dem Zeiger ein Ziel zugewiesen ist.
Allgemein sollte aber noch gesagt sein, daß niemals ein Zeiger verwendet werden sollte, der nicht bereits ein Ziel zugewiesen bekommen hat. Um etwaige Fehler innerhalb eines Programmablaufs auszzuschließen empfiehlt es sich, jeden Zeiger mit dem Rückgabewert der Funktion NULL() zu belegen
,um diesen als nicht-zugewiesen festzulegen!