Une variable pointeur de type T est une variable destinée á contenir
une référence vers un réceptacle de type T.
Comme toute variable, une variable de type pointeur n'est pas
initialisée lors de sa déclaration. L'initialisation doit
apparaître dans la partie instruction sous l'une des formes
suivantes :
Soit p un pointeur de type T
La création du réceptacle est faite lors de l'exécution du programme; c'est ce qu'on appelle allocation dynamique explicite. Comme les réceptacles ainsi crées peuvent recevoir une valeur, on les appelle parfois variables dynamiques, malgré le fait que, contrairement aux autres variables (variables statiques, déclarées dans une partie déclaration de variables), ils ne sont pas associés á un nom. Les réceptacles créés par allocation dynamique explicite (variables dynamiques) ne peuvent être accédés que via des pointeurs; les variables déclarées dans une partie déclaration de variables (variables statiques) ne peuvent jamais être accédées, dans un programme PASCAL, via des pointeurs.
L'espace mémoire alloué dynamiquement doit être géré par le
programme luimême. On peut affecter á une variable pointeur de
type T la valeur d'une autre variable pointeur de type T; on peut
tester l'égalité (ou l'inégalité) des valeurs de variables pointeurs
de même type. Lorsqu'une variable dynamique n'est plus
utilisée dans la suite du programme, il convient de libérer
explicitement l'espace mémoire alloué dynamiquement afin de
pouvoir le réutiliser ultérieurement.
dispose (p)
a pour effet de libérer l'espace mémoire du réceptacle pointé par
p.
Exemples
type nombre = integer; link = ^nombre; var p : link; x : nombre; begin x := 5; p := ^x; {erreur á la compilation : x n'a pas été allouée dynamiquement} writeln (p^); ... end. type p = ^person; person = record name : packed array[1..10] of char; link : p end; var x,y : p; begin new(x); x^.name := ´toto ´; new(x^.link); y := x^.link; y^.name := ´roberto ´; y^.link := nil; {***} ... dispose(y); dispose(x); ... end.
Situation au point *** :