À un niveau inférieur, il n'existe pas de tableau multidimensionnel. Il s'agit simplement d'un bloc de mémoire plat, suffisamment grand pour contenir un nombre donné d'éléments. En C, un tableau multidimensionnel est conceptuellement un tableau dont les éléments sont également des tableaux. Donc, si vous le faites :
int array[2][3];
Conceptuellement, vous vous retrouvez avec :
array[0] => [0, 1, 2]
array[1] => [0, 1, 2]
Il en résulte que les éléments sont disposés de manière contiguë dans la mémoire, car array[0]
y array[1]
ne contiennent pas de données, ce sont juste des références aux deux tableaux internes. Notez que cela signifie que seul le tableau [0, 1, 2]
occupent réellement de l'espace dans la mémoire. Si vous étendez ce modèle à la dimension suivante, vous pouvez le constater :
int array[2][3][2];
...vous donnera une structure comme :
array[0] => [0] => [0, 1]
[1] => [0, 1]
[2] => [0, 1]
array[1] => [0] => [0, 1]
[1] => [0, 1]
[2] => [0, 1]
qui continue d'arranger les éléments consécutivement dans la mémoire (comme ci-dessus, seulement les [0, 1]
occupent réellement de l'espace en mémoire, tout le reste n'est qu'une partie d'une référence à l'une de ces entrées). Comme vous pouvez le constater, ce schéma se poursuit quel que soit le nombre de dimensions que vous avez.
Et juste pour le plaisir :
int array[2][3][2][5];
Il vous donne :
array[0] => [0] => [0] => [0, 1, 2, 3, 4]
[1] => [0, 1, 2, 3, 4]
[1] => [0] => [0, 1, 2, 3, 4]
[1] => [0, 1, 2, 3, 4]
[2] => [0] => [0, 1, 2, 3, 4]
[1] => [0, 1, 2, 3, 4]
array[1] => [0] => [0] => [0, 1, 2, 3, 4]
[1] => [0, 1, 2, 3, 4]
[1] => [0] => [0, 1, 2, 3, 4]
[1] => [0, 1, 2, 3, 4]
[2] => [0] => [0, 1, 2, 3, 4]
[1] => [0, 1, 2, 3, 4]