En C, je sais que je peux allouer dynamiquement un tableau à deux dimensions sur le tas en utilisant le code suivant:
int** someNumbers = malloc(arrayRows*sizeof(int*));
for (i = 0; i < arrayRows; i++) {
someNumbers[i] = malloc(arrayColumns*sizeof(int));
}
Clairement, cela crée un tableau à une dimension de pointeurs sur un tas de séparer une dimensions des tableaux d'entiers, et "Le Système" peut comprendre ce que je veux dire quand je demande:
someNumbers[4][2];
Mais quand je statiquement déclarer un tableau 2D, comme dans la ligne suivante...:
int someNumbers[ARRAY_ROWS][ARRAY_COLUMNS];
...une structure similaire créé sur la pile, ou est-il d'une autre forme complètement? (c'est à dire est-il un 1D tableau de pointeurs? Si non, quel est-il et comment faire pour les références obtenez compris?)
Aussi, quand j'ai dit, "Le Système", ce qui est réellement responsable de le comprendre? Le noyau? Ou ne le compilateur C de faire le tri lors de la compilation?