Ein weiterer Vorteil vom gegenüber der Sprache C sind die Variablen-Parameter. C kennt ausschliesslich Werteparameter, d.h. die Prozedur kann den ihr übergebenen Wert nur lokal verändern. Soll der Inhalt eines Parameters in der Prozedur bleibend verändert werden, dann muss man einige Kunstgriffe anwenden. Was in so einfach aussieht:
MODULE m; PROCEDURE P(i: INTEGER; VAR j:INTEGER); BEGIN j:=2*i END P; VAR k: INTEGER; BEGIN P(2,k) END m.
wird in C folgendermassen geschrieben:
Das bedeutet, dass man bei der Rückübersetzung aufpassen muss. Eine ,,wörtliche`` Übersetzung wird funktionieren, aber seine ,,C-Vergangenheit`` nicht verbergen können:
MODULE m; FROM SYSTEM IMPORT ADR; TYPE IntegerPtr = POINTER TO INTEGER; PROCEDURE P(i: INTEGER; j:IntegerPtr); BEGIN j^:=2*i END P; VAR k: INTEGER; BEGIN P(2,ADR(k)) END m.
Beispiele für eine elegante Übersetzung in findet man im Modul GraphicsL. Die Prozedur InitBitmap erwartet als ersten Parameter die Adresse einer BitMap. In ist dies ein VAR-Parameter des Typs BitMap. Die Übergabe mit Hilfe von VAR-Parametern wurde überall dort verwendet, wo es nicht nötig ist, einen Zeiger zu übergeben.