© Éditions Eyrolles
123
chapitre n° 7
Les tableaux et les pointeurs
1.2 Quelques règles
a) Les éléments de tableau
Un élément de tableau est une lvalue. Il peut donc apparaître à gauche d’un opérateur d’affectation comme dans :
t[2] = 5
Il peut aussi apparaître comme opérande d’un opérateur d’incrémentation, comme dans :
t[3]++
--t[i]
En revanche, il n’est pas possible, si t1 et t2 sont des tableaux d’entiers, d’écrire t1 = t2 ;
en fait, le langage C n’offre aucune possibilité d’affectations globales de tableaux, comme
c’était le cas, par exemple, en Pascal.
b) Les indices
Un indice peut prendre la forme de n’importe quelle expression arithmétique de type entier
(ou caractère, compte tenu des règles de conversion systématique). Par exemple, si n, p, k et j
sont de type int, ces notations sont correctes :
t[n-3]
t[3*p-2*k+j%l]
Il en va de même, si c1 et c2 sont de type char, de :
t[c1+3]
t[c2-c1]
c) La dimension d’un tableau
La dimension d’un tableau (son nombre d’éléments) ne peut être qu’une constante ou une
expression constante. Ainsi, cette construction :
#define N 50
.....
int t[N] ;
float h[2*N-1] ;
est correcte. En revanche, elle ne le serait pas (en C) si N était une constante symbolique définie par const int N=50, les expressions N et 2*N-1 n’étant alors plus calculables par le
compilateur (elle sera cependant acceptée en C++).
d) Débordement d’indice
Aucun contrôle de débordement d’indice n’est mis en place par la plupart des compilateurs.
De sorte qu’il est très facile (si l’on peut dire !) de désigner et, donc, de modifier, un emplacement situé avant ou après le tableau.
Delannoy Livre.book Page 123 Mercredi, 6. mai 2009 4:26 16
123
chapitre n° 7
Les tableaux et les pointeurs
1.2 Quelques règles
a) Les éléments de tableau
Un élément de tableau est une lvalue. Il peut donc apparaître à gauche d’un opérateur d’affectation comme dans :
t[2] = 5
Il peut aussi apparaître comme opérande d’un opérateur d’incrémentation, comme dans :
t[3]++
--t[i]
En revanche, il n’est pas possible, si t1 et t2 sont des tableaux d’entiers, d’écrire t1 = t2 ;
en fait, le langage C n’offre aucune possibilité d’affectations globales de tableaux, comme
c’était le cas, par exemple, en Pascal.
b) Les indices
Un indice peut prendre la forme de n’importe quelle expression arithmétique de type entier
(ou caractère, compte tenu des règles de conversion systématique). Par exemple, si n, p, k et j
sont de type int, ces notations sont correctes :
t[n-3]
t[3*p-2*k+j%l]
Il en va de même, si c1 et c2 sont de type char, de :
t[c1+3]
t[c2-c1]
c) La dimension d’un tableau
La dimension d’un tableau (son nombre d’éléments) ne peut être qu’une constante ou une
expression constante. Ainsi, cette construction :
#define N 50
.....
int t[N] ;
float h[2*N-1] ;
est correcte. En revanche, elle ne le serait pas (en C) si N était une constante symbolique définie par const int N=50, les expressions N et 2*N-1 n’étant alors plus calculables par le
compilateur (elle sera cependant acceptée en C++).
d) Débordement d’indice
Aucun contrôle de débordement d’indice n’est mis en place par la plupart des compilateurs.
De sorte qu’il est très facile (si l’on peut dire !) de désigner et, donc, de modifier, un emplacement situé avant ou après le tableau.
Delannoy Livre.book Page 123 Mercredi, 6. mai 2009 4:26 16
