next up previous
Next: Allocation dynamique de la Up: Les pointeurs et les Previous: La pile et les

Les pointeurs

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





Frederic Mesnard
mardi, 15 décembre 1998, 16:13:24 GMT+4