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!