LES POINTEURS
Les pointeurs permettent de représenter des structures de données complexes,
de changer le contenu d'une variable s'ils sont mis comme arguments
de fonctions, de travailler avec
de la mémoire qui a été allouée dynamiquement et de stocker les données
de manière complexe.
Un pointeur fournit un moyen indirect d'accéder à la valeur d'une variable. Prenons un exemple pour mieux comprendre son fonctionnement :
program pointers1( output );
type int_pointer = ^integer;
var iptr : int_pointer;
begin
new( iptr );
iptr^ := 10;
writeln('La valeur est de ', iptr^);
dispose( iptr )
end.
La ligne
type int_pointer = ^integer;déclare un nouveau type de variable nommé int_pointer. Ce type est un pointeur ( ce qui est dénoté par ^ ) vers un entier.
La ligne
var iptr : int_pointer;déclare une variable nommée iptr, de type int_pointer. La variable iptr ne contient pas de valeur numérique, mais l'adresse mémoire d'une variable créée de manière dynamique ( en utilisant new). Il n'y a pas d'espace mémoire alloué par iptr, ce qui signifie que vous ne pouvez pas l'utiliser avant d'en avoir réservé. De manière imagée, la situation ressemble à ceci :

La ligne
new( iptr );alloue dynamiquement une zone de mémoire ( c'est-à-dire qu'elle est réservée lorsque le programme est exécuté par l'ordinateur). La variable de type pointeur iptr pointe vers un espace mémoire qui peut être utilisé pour stocker une valeur entière. De manière imagée, cela pourrait ressembler à ceci :

La ligne
iptr^ := 10;permet d'écrire dans l'espace mémoire alloué la valeur entière 10. De manière imagée, cela pourrait ressembler à ceci :

La ligne
dispose( iptr )permet de désallouer ( libérer ) l'espace mémoire alloué ( réservé ) pour iptr et de la rendre au système. Ceci signifie que iptr ne peut plus être utilisé à moins qu'il ne soit associé de nouveau à une instruction new(). De manière imagée, la situation pourrait se représenter par ceci :
