Cas général

Pour des raisons de gain de place mémoire, on est parfois amené à créer des tableaux à deux dimensions dont toutes les lignes n'ont pas la même taille. Ceci peut se réaliser à l'aide d'un tableau de pointeurs vers des tableaux de tailles différentes, associé à un autre tableau qui donnera la taille de chaque ligne. On obtient alors la structure de données suivante :


Image fig3

Si nous supposons que le type des objets terminaux est int, pour traduire cette structure de données en langage C, les programmeurs ont l'habitude de « tricher », et de ne pas utiliser le type tableau de pointeurs vers des tableaux de int, considéré comme étant trop compliqué (un tel type s'écrit : int (*tab[NB_ELEM])[]). La solution habituellement retenue, consiste à utiliser le type tableau de pointeurs vers des int, soit int *tab[NB_ELEM]. Voici un exemple d'une telle déclaration avec initialisation statique du tableau :

#define NB_ELEM 3
int taille[NB_ELEM] = {1, 2, 3};
int ligne1[] = {10};
int ligne2[] = {20,21};
int ligne3[] = {30,31,32};

int *tab[] = {ligne1, ligne2, ligne3};
Pour une référence à l'élément $j$ de la ligne $i$, on n'a que l'embarras du choix. Nous donnons ci-après trois méthodes différentes d'imprimer les éléments du tableau ligne par ligne.



Sous-sections
Matthieu Moy 2017-02-08