Le but des pointeurs est de pouvoir gérer dynamiquement la mémoire de l'ordinateur. Prenons l'exemple de l'application suivante : on a deux vecteurs et de taille n (avec n grand). Selon le choix de l'utilisateur on effectuera soit le produit scalaire interne soit le produit externe . Dans le premier cas le résultat est un nombre réel dans le deuxieme cas il s'agit d'une matrice . L'utilisation des pointeurs va nous permettre d'allouer la mémoire nécessaire au stockage de la matrice seulement si on en a besoin.
program allocation; const n=1000; type vecteur=array[1..n] of real; pvecteur=^vecteur; matrice=array[1..n, 1..n] of real; pmatrice=^matrice; var pv1, pv2 : pvecteur; pm : pmatrice; x : real; choix : integer; procedure produit_interne(v, w : vecteur; var p : real); var i : integer; begin p:=0; for i:=1 to n do p:=p+v[i]*w[i]; end; procedure produit_externe(v, w : vecteur; var m : matrice); var i, j : integer; begin for i:=1 to n do for j:=1 to n do m[i,j]:=v[i]*w[j]; end; procedure saisie(var v : vecteur); var i : integer; begin for i:=1 to n do begin writeln('entrez le coefficicent ',i:2); readln(v[i]); end; end; procedure affiche_matrice(m : matrice); var i, j : integer; begin for i:=1 to n do begin writeln; for j:=1 to n do write(m[i,j]); end; end; begin new(pv1); new(pv2); saisie(pv1^); saisie(pv2^); writeln('Pour le produit interne entrez 1, pour le produit externe 2'); readln(choix); while (choix<>1) and (choix<>2) do begin writeln('mauvais choix, recommencez'); readln(choix); end; if (choix=1) then begin produit_interne(pv1^, pv2^, x); writeln('Le resultat du produit interne est ', x); end else begin new(pm); produit_externe(pv1^, pv2^, pm^); writeln('Le resultat du produit externe est'); affiche_matrice(pm^); end; end.