Next: Passage de tableau en
Up: Relations entre tableaux et
Previous: Conversion des tableaux
Sous-sections
La sémantique de l'opérateur d'indexation consiste à dire qu'après les
déclarations :
int t[N];
int i;
t[i] est équivalent à
*(t + i).
Vérifions que cela est bien conforme à la façon dont nous l'avons utilisé
jusqu'à présent.
Nous avons vu que
t à pour valeur l'adresse du premier élément du
tableau.
D'après ce que nous savons sur l'addition entre un pointeur et un entier, nous
pouvons conclure que
t + i est l'adresse de l'élément de rang
i
du tableau.
Si nous appliquons l'opérateur d'indirection à
(t+i) nous obtenons
l'élément de rang
i du tableau, ce que nous notions jusqu'à présent
t[i].
L'opérateur d'indexation noté [] est donc inutile, et n'a été
offert que pour des raisons de lisibilité des programmes, et pour ne pas
rompre avec les habitudes de programmation.
Puisque l'opérateur d'indexation s'applique à des valeurs de type pointeur,
on va pouvoir l'appliquer à n'importe quelle valeur de type pointeur, et pas
seulement aux constantes repérant des tableaux.
En effet, après les déclarations :
int t[10];
int * p;
on peut écrire :
p = &t[4];
et utiliser l'opérateur d'indexation sur
p,
p[0] étant
t[4],
p[1] étant
t[5], etc.
p peut donc être
utilisé comme un sous-tableau de
t.
L'opérateur d'indexation est commutatif ! En effet, t[i] étant
équivalent à *(t + i) et l'addition étant commutative, t[i]
est équivalent à *(i + t) donc à i[t].
Lorsqu'on utilise l'opérateur d'indexation, on peut noter indifféremment
l'élément de rang i d'un tableau, t[i] ou i[t].
Il est bien évident que pour des raisons de lisibilité, une telle notation
doit être prohibée, et doit être considérée comme une conséquence
pathologique de la définition de l'opérateur d'indexation.
Next: Passage de tableau en
Up: Relations entre tableaux et
Previous: Conversion des tableaux
Bernard Cassagne
1998-12-09