Note au lecteur
Si la notion de pointeurs vous était nouvelle jusqu'ici, alors sautez les sections 9.4 et 9.5 de ce chapitre et les exercices correspondants. Traitez d'abord le chapitre suivant jusqu'à ce que les notions de pointeurs et d'adresses se soient bien consolidées.
Si nous avons besoin d'un ensemble de pointeurs du même type, nous pouvons les réunir dans un tableau de pointeurs.
Déclaration
Déclaration d'un tableau de pointeurs
<Type> *<NomTableau>[<N>] déclare un tableau <NomTableau> de <N> pointeurs sur des données du type <Type>.
Exemple
double *A[10];déclare un tableau de 10 pointeurs sur des rationnels du type double dont les adresses et les valeurs ne sont pas encore définies.
Remarque
Le plus souvent, les tableaux de pointeurs sont utilisés pour mémoriser de façon économique des chaînes de caractères de différentes longueurs. Dans la suite, nous allons surtout considérer les tableaux de pointeurs sur des chaînes de caractères.
Initialisation
Nous pouvons initialiser les pointeurs d'un tableau sur char par les adresses de chaînes de caractères constantes.
Exemple
char *JOUR[] = {"dimanche", "lundi", "mardi", "mercredi", "jeudi", "vendredi", "samedi"};déclare un tableau JOUR[] de 7 pointeurs sur char. Chacun des pointeurs est initialisé avec l'adresse de l'une des 7 chaînes de caractères.
int I; for (I=0; I<7; I++) printf("%s\n", JOUR[I]);
Comme JOUR[I] est un pointeur sur char, on peut afficher les premières lettres des jours de la semaine en utilisant l'opérateur 'contenu de' :
int I; for (I=0; I<7; I++) printf("%c\n", *JOUR[I]);
L'expression JOUR[I]+J désigne la J-ième lettre de la I-ième chaîne. On peut afficher la troisième lettre de chaque jour de la semaine par:
int I; for (I=0; i<7; I++) printf("%c\n",*(JOUR[I]+2));
Résumons: Les tableaux de pointeurs
int *D[];
déclare un tableau de
pointeurs sur des éléments du type int
D[i] peut pointer |
sur des variables simples ou |
|
sur les composantes d'un tableau. |
||
D[i] |
désigne l'adresse contenue dans l'élément i de D |
|
(Les adresses dans D[i] sont variables) |
||
*D[i] |
désigne le contenu de l'adresse dans D[i] |
Si D[i] pointe dans un tableau,
D[i] |
désigne l'adresse de la première composante |
||
D[i]+j |
désigne l'adresse de la j-ième composante |
||
*(D[i]+j) |
désigne le contenu de la j-ième composante |