Auch in Modula können wir zu jedem gegebenen Typ <T> einen Pointertyp <PT> definieren:
TYPE <PT> = POINTER TO <T>;Pointerwerte sind Bezüge auf Speicherobjekte, entstehen also erst zur Laufzeit unseres Programms; daher gibt es für sie auch keine Standardbezeichnungen. Eine Ausnahme bildet der Pointerwert NIL (anderswo auch: NULL oder void ); er ist in jedem Pointertyp vorhanden und bezieht sich auf gar nichts, ist aber wohldefiniert.
Auf Pointerwerten sind nur wenige Operationen definiert:
In Modula 2 und Pascal bekommen wir Pointerwerte als Referenzen
auf neue Speicherobjekte:
ist p eine Variable eines Pointertyps <PT>,
so erzeugt die Standardprozedur NEW(p)
in einem eigenen Speicherbereich,
genannt die Halde (Heap)
ein Speicherobjekt von dem Typ <T>,
auf den die Pointerwerte in <PT> verweisen,
und legt die Referenz in p ab.
Die dadurch definierte dynamische Variable
kann über die Benennung p
angesprochen werden und lebt so lange,
bis wir sie mittels der Standardprozedur DISPOSE(p)
wieder frei geben, oder bis zum Ende des Programmlaufes.
Das gilt selbst dann, wenn uns zwischendurch alle Zugriffspfade
auf das Objekt abhanden gekommen sind; und kommt dies zu oft vor,
so kann die Halde erschöpft werden.
In C und verwandten Sprachen kann man eine Referenz auf eine Variable a
in der Form &a erzeugen; das braucht man dort auch zur
Simulation von Referenzargumenten,
die es ansonsten nicht gibt.
Dort bedeutet auch eine Benennung einer
Arrayvariablen eine
Referenz auf das erste Element des Array, und damit kann man sich
Referenzen auf die weiteren Elemente berechnen;
eine leider äußerst fehleranfällige Technik!