Une utilisation particulièrement intéressante des pointeurs associés aux structures est la définition de structures dites chaînées, dont l'exemple le plus simple est la liste chaînée. On pourra généraliser cet exemple aux arbres et aux graphes.
L'idée est de réserver un champ dans chaque cellule de liste pour pointer sur la cellule suivante de la liste.
Une liste est ainsi représentée par le pointeur sur sa première cellule.
La liste vide, ou la fin de liste, sera représentée par le
pointeur NULL
.
Voici les déclarations de type nécessaires à la définition
d'une structure de liste de flottants en double précision (double
) :
Noter que pour désigner le type du champ Suivant
,
il est nécessaire de
faire apparaître le nom ``provisoire'' de la structure (TmpCellule
)
au début de la définition, après le mot-clé struct
.
Noter également que, comme le type Cellule n'a pas
à cet endroit reçu de définition complète,
il faut dans la définition du champ Suivant
employer la syntaxe :
struct nom_provisoire * nom_champ;
Le lecteur attentif aura certainement relevé la redondance des
types PtrCellule
et Liste
, qui sont
en effet strictement équivalents. Cette redondance est volontaire,
elle permet d'améliorer la lisibilité en distinguant les
pointeurs de cellule (utilisés pour pointer une cellule isolée
ou une cellule particulière, par exemple lors d'une construction
ou d'un parcours de liste) et les pointeurs de liste, qui, pointant
effectivement sur la première cellule de la liste, permettent
indirectement l'accès à la liste entière.
Voici pour terminer un exemple simplifié de construction et d'affichage d'une liste composée de deux cellules. Il ne sera pas tenu compte de la possibilité d'erreur lors de l'allocation (voir exemple ) ni de la libération de mémoire (voir section ).