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