Définir un tableau


Pour commencer, nous allons voir comment définir un tableau de 4 int :

int tableau[4];



Voilà, c'est tout. Il suffit donc de rajouter entre crochets le nombre de cases que vous voulez mettre dans votre tableau. Il n'y a pas de limite (à part peut-être la taille de votre mémoire, quand même).

Maintenant, comment accéder à chaque case du tableau ? C'est simple, il faut écrire tableau[numeroDeLaCase].


Attention : un tableau commence à l'indice n° 0 ! Notre tableau de 4 int a donc les indices 0, 1, 2 et 3. Il n'y a pas d'indice 4 dans un tableau de 4 cases ! C'est une source d'erreurs très courantes, souvenez-vous-en.



Si je veux mettre dans mon tableau les mêmes valeurs que celles indiquées sur la fig. suivante, je devrai donc écrire :

int tableau[4];


tableau[0] = 10;

tableau[1] = 23;

tableau[2] = 505;

tableau[3] = 8;


Je ne vois pas le rapport entre les tableaux et les pointeurs ?


En fait, si vous écrivez juste tableau, vous obtenez un pointeur. C'est un pointeur sur la première case du tableau. Faites le test :

int tableau[4];


printf("%d", tableau);



Résultat, on voit l'adresse où se trouve tableau :

1600



En revanche, si vous indiquez l'indice de la case du tableau entre crochets, vous obtenez la valeur :

int tableau[4];


printf("%d", tableau[0]);




10



De même pour les autres indices. Notez que comme tableau est un pointeur, on peut utiliser le symbole * pour connaître la première valeur :

int tableau[4];


printf("%d", *tableau);



10



Il est aussi possible d'obtenir la valeur de la seconde case avec *(tableau + 1) (adresse de tableau + 1).
Les deux lignes suivantes sont donc identiques :

tableau[1] // Renvoie la valeur de la seconde case (la première case étant 0)

*(tableau + 1) // Identique : renvoie la valeur contenue dans la seconde case



En clair, quand vous écrivez tableau[0], vous demandez la valeur qui se trouve à l'adresse tableau + 0 case (c'est-à-dire 1600).


Si vous écrivez tableau[1], vous demandez la valeur se trouvant à l'adresse tableau + 1 case (c'est-à-dire 1601).


Et ainsi de suite pour les autres valeurs.


Les tableaux à taille dynamique



Le langage C existe en plusieurs versions

.
Une version récente, appelée le C99, autorise la création de tableaux à taille dynamique, c'est-à-dire de tableaux dont la taille est définie par une variable :

int taille = 5;

int tableau[taille];



Or cela n'est pas forcément reconnu par tous les compilateurs, certains planteront sur la seconde ligne. Le langage C que je vous enseigne depuis le début (appelé le C89) n'autorise pas ce genre de choses. Nous considérerons donc que faire cela est interdit.

Nous allons nous mettre d'accord sur ceci : vous n'avez pas le droit d'utiliser une variable entre crochets pour la définition de la taille du tableau, même si cette variable est une constante ! Le tableau doit avoir une dimension fixe, c'est-à-dire que vous devez écrire noir sur blanc le nombre correspondant à la taille du tableau :

int tableau[5];


Mais alors… il est interdit de créer un tableau dont la taille dépend d'une variable ?



Non, rassurez-vous : c'est possible, même en C89. Mais pour faire cela, nous utiliserons une autre technique (plus sûre et qui marche partout) appelée l'allocation dynamique. 

Créé avec HelpNDoc Personal Edition: Générer des livres électroniques EPub facilement