On peut en Pascal manipuler des adresses en mémoire par l'intermédiaire d'objets du type pointeur.
Un pointeur correspond à un couple (adresse mémoire, type). Un pointeur est une variable qui contient l'adresse mémoire d'un objet de type donné.
Par exemple, si une variable p contient l'adresse d'une variable q, on dit que p pointe sur q.
Soit un type base. La syntaxe pour déclarer un pointeur sur un objet de type base est la suivante :
type pbase = ^base; var pointeur : pbase;
Un premier exemple :
program exemple1; type pinteger = ^integer; var q : integer; p : pinteger; begin p:=nil; (* le pointeur p a pour valeur nil *) q:=100; (* la variable q a pour valeur 100 *) new(p); (* creation d'une variable de type entier, pointee par p *) p^:=q; (* la variable pointee par p prend la valeur de q *) writeln(p^); (* affichage de la valeur de la variable pointee par p, 100*) writeln(p); (* affichage de la valeur du pointeur p -> une adresse *) end.
Un deuxième exemple :
program exemple2; type pinteger=^integer; var p1, p2 : pinteger; begin p1:=nil; p2:=nil; new(p1); new(p2); p1^:=10; p2^:=20; p2:=p1; writeln(p2^); end.Ce programme affiche 10. Deux pointeurs peuvent pointer sur la même variable. Après l'affectation p2:=p1; les variables p1^ et p2^ sont des alias.
Un autre exemple du même genre :
program exo1; type pinteger = ^integer; var p1, p2 : pinteger; begin new(p1); new(p2); p2^:=5; p1^:=0; p2:=p1; p1^:=p2^+p1^; writeln(p1^, p2^); end.Ce programme affiche :
0 0