1. Les variables dynamiques ou pointeurs
n rapelle que pendant l'exécution
d'un programme, une donnée particulière est contenue dans
une case mémoire située dans la mémoire centrale.
Chaque case mémoire est associée (ou repérée)
par un nombre entier dénommé son adresse. Ci-dessous
3 mémoires contenant chacune une donnée (figurée en
rouge) et repérée par son adresse
La notion de pointeurs est très commode dans les langages de programmation, car elle permet de représenter simplement des structures de données dynamiques comme les piles, les files, les listes, les arbres etc...
Toutefois le revers de la médaille se situe dans la trop grande
proximité d'un pointeur avec le bas niveau, celui de la machine,
ce qui nuit à l'abstraction du programme ! C'est pourquoi si les
pointeurs sont présents dans le pascal, le C, le C++, ils ont été
éliminés dans Java et remplacés par des références
qui sont des encapsulations de pointeurs (Delphi travaille essentiellement
avec des références mais autorise l'utilisation de pointeurs).
outes les variables de
base en pascal sont de type statique, le type pointeur permet l'utilisation
de variable dynamique. Il existe donc en pascal un constructeur de type
pointeur c'est un identificateur de type précédé d'une
flêche "^"
Syntaxe :
Exemple de déclaration :
Type
Pentier = ^integer ;Nous avons déclaré 4 types de variables pointeurs : Pentier qui pointe vers une variable de type integer, PString qui pointe vers une variable de type string, PTable qui pointe vers un tableau d'integer, PEnregistr qui pointe vers un enregistrement (record).
PString = ^string ;
PTable = ^Table ;
Table = Array[1..10] of integer ;
PEnregistr = ^Enreg ;
Enreg = record
nom, prenom :string ;
age : 1..100 ;
end;
eprenons dans un programme
pascal les types déclarés ci-haut :
Le programme
pascal
|
|
program LesPointeurs ;
Type Pentier = ^integer ; PString = ^string ; PTable = ^Table ; Table = Array[1..10] of integer ; PEnregistr = ^Enreg ; Enreg = record nom, prenom :string ; age : 1..100 ; end; var x : Pentier ; y : PString ; t : PTable ; z : PEnregistr ; begin x^ := 12 ; y^ := 'abcde' ; t^[1] := -1 ; t^[2] := -2 ; ...... t^[10] := -10 ; z^.nom := 'package' ; z^.prenom := 'pédagogique' ; z^.age := 3 ; end. |
![]() |
uelques exemples de déclaration
de structures de données dynamiques représentées par
des pointeurs en pascal.
![]() Voici une implantation possible de la liste unidirectionnelle en pascal : type ListeUni = ^cell ; cell = record elt : string ; suite : ListeUni ; end ; |
![]() Voici une implantation possible de la liste bidirectionnelle en pascal : type ListeBi = ^cell ; cell = record avant : ListeBi ; elt : string ; suite : ListeBi ; end ; |
![]() un arbre binaire Voici une implantation possible d'un arbre binaire en pascal : type Arbre = ^noeud; noeud = record elt : string ; filsg, filsd : Arbre ; end ; |
'assistant propose un exemple
de liste linéaire chaînée (unidirectionnelle) et deux
exercices testant votre compréhension de l'écriture de cette
structure de données en pascal.
L'exemple :
Les deux exercices portent sur la même structure figurée
ci-dessous, il vous est demandé de répondre à des
questions sur cette structure de liste:
l'image de tous les exercices
précédents, l'assistant vous indiquera auditivement et visuellement
la justesse de votre réponse.