Programmer en langage C
126
© Éditions Eyrolles
Il est possible de ne mentionner dans les accolades que les premières valeurs, comme dans ces
exemples :
int tab[5] = { 10, 20 } ;
int tab[5] = { 10, 20, 5 } ;
Les valeurs manquantes seront, suivant la classe d’allocation du tableau, initialisées à zéro
(statique) ou aléatoires (automatique).
De plus, il est possible d’omettre la dimension du tableau, celle-ci étant alors déterminée par
le compilateur par le nombre de valeurs énumérées dans l’initialisation. Ainsi, la première
déclaration de ce paragraphe est équivalente à :
int tab[] = { 10, 20, 5, 0, 3 } ;
La construction suivante :
#define N 10
...
int tab[5] = { 2*N-1, N-1, N, N+1, 2*N+1}
est correcte. Elle ne le serait pas, en revanche, si l’on définissait N comme une constante
symbolique entière par const int N = 10.
3.2 Initialisation de tableaux à plusieurs indices
Voyez ces deux exemples équivalents (nous avons volontairement choisi des valeurs consécutives
pour qu’il soit plus facile de comparer les deux formulations) :
int tab [3] [4] = { { 1, 2, 3, 4 } ,
{ 5, 6, 7, 8 },
{ 9,10,11,12 } }
int tab [3] [4] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 } ;
La première forme revient à considérer notre tableau comme formé de trois tableaux de quatre
éléments chacun. La seconde, elle, exploite la manière dont les éléments sont effectivement
rangés en mémoire et elle se contente d’énumérer les valeurs du tableau suivant cet ordre.
Là encore, à chacun des deux niveaux, les dernières valeurs peuvent être omises. Les déclarations suivantes sont correctes (mais non équivalentes) :
int tab [3] [4] = { { 1, 2 } , { 3, 4, 5 } } ;
int tab [3] [4] = { 1, 2 , 3, 4, 5 } ;
Delannoy Livre.book Page 126 Mercredi, 6. mai 2009 4:26 16
Précédent

- 139/281

Suivant