Programmer en langage C
124
© Éditions Eyrolles
Pour être efficace, le contrôle d’indice devrait pouvoir se faire, non seulement dans le cas où
l’indice est une constante, mais également dans tous les cas où il s’agit d’une expression quelconque. Cela nécessiterait l’incorporation, dans le programme objet, d’instructions supplémentaires assurant cette vérification lors de l’exécution, ce qui conduirait à une perte de temps. Par
ailleurs, nous verrons que le problème est rendu encore plus ardu, compte tenu de ce que
l’accès à un élément d’un tableau peut également, en C, se faire par le biais d’un pointeur.
Pour en comprendre les conséquences, il faut savoir que, lorsque le compilateur rencontre
une lvalue telle que t[i], il en détermine l’adresse en ajoutant à l’adresse de début du
tableau t, un décalage proportionnel à la valeur de i (et aussi proportionnel à la taille de
chaque élément du tableau).
La norme C99 autorise que la dimension soit une expression quelconque, pour peu que sa
valeur soit calculable au moment où l’on rencontre la déclaration du tableau. Dans ce cas,
l’attribution de l’emplacement mémoire correspondant sera réalisé à l'aide d’une technique de
« gestion dynamique » semblable à celle présentée au chapitre 11 (mais ici, les instructions
nécessaires seront mises en place automatiquement par le compilateur).
2 Les tableaux à plusieurs indices
2.1 Leur déclaration
Comme tous les langages, C autorise les tableaux à plusieurs indices (on dit aussi à plusieurs
dimensions). Par exemple, la déclaration :
int t[5][3]
réserve un tableau de 15 (5 x 3) éléments. Un élément quelconque de ce tableau se trouve
alors repéré par deux indices comme dans ces notations :
t[3][2]
t[i][j]
t[i-3][i+j]
Notez bien que, là encore, la notation désignant un élément d’un tel tableau est une lvalue. Il
n’en ira toutefois pas de même de notations telles que t[3] ou t[j] bien que, comme nous
le verrons un peu plus tard, de telles notations aient un sens en C.
Aucune limitation ne pèse sur le nombre d’indices que peut comporter un tableau. Seules les
limitations de taille mémoire liées à un environnement donné risquent de se faire sentir.
2.2 Arrangement en mémoire des tableaux à plusieurs indices
Les éléments d’un tableau sont rangés suivant l’ordre obtenu en faisant varier le dernier indice
en premier. (Pascal utilise le même ordre, Fortran utilise l’ordre opposé). Ainsi, le tableau t
déclaré précédemment verrait ses éléments ordonnés comme suit :
t[0][0]
t[0][1]
Delannoy Livre.book Page 124 Mercredi, 6. mai 2009 4:26 16
Précédent

- 137/281

Suivant