11.2. Définition d'un tableau à une dimension

Icône de l'outil pédagogique Définition d'un tableau à une dimension

La syntaxe d'une définition de tableau est la suivante :

static type_d_un_element nom_tableau[NB_ELEMENTS] ;

Cette définition réserve NB_ELEMENTS emplacements consécutifs en mémoire permettant d'accueillir NB_ELEMENTS valeurs de type type_d_un_element.

Le mot‐clé optionnel static demande au compilateur d'allouer le tableau dans la mémoire statique, au lieu de la pile qui est utilisée par défaut pour une variable locale. Cela évite de faire « exploser la pile » et a pour effet secondaire d'initialiser le tableau avec des zéros. Pour préserver la pile, l'utilisation de static est conseillé avec toutes les « grosses » variables, comme les tableaux ou les structures.

Sans static (déconseillé), le tableau est défini en pile et ses éléments n'ont pas de valeur par défaut.

NB_ELEMENTS doit être une constante (par exemple 100) ou une constante symbolique définie par #define. Mais NB_ELEMENTS ne peut pas être une variable ou une constante définie avec le mot‐clé const.

Utilisez une constante symbolique (définie par #define) pour indiquer le nombre d'éléments d'un tableau : le programme devient plus lisible et plus évolutif.

Par exemple, la définition short int tab[5] réserve de la place mémoire pour 5 entiers courts :

– tab[0] est le premier élément du tableau tab ; on dit que c’est l’élément d’indice 0.

tab[i] est le (i+1)ème élément du tableau (c’est l’élément d’indice i) ;

– tab[4] est le 5ème et dernier élément du tableau (attention !).

– les valeurs des éléments sont indéfinies (quelconques).

Exemple 55 : Définition de tableaux (static est obligatoire pour les plus gros)

Insistons : le mot‐clé static dans une définition de tableau oblige le compilateur à définir le tableau (qu'on souhaite voir local à une fonction) dans une autre zone mémoire que la pile. La pile, utilisée pour les variables locales, a une taille limitée qui rend dangereuse l’allocation de variables importantes. Une solution consiste à utiliser static, qui ne modifie pas la visibilité de la variable (mais rend sa durée de vie permanente et l'initialise à 0).