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 en fait un tableau unidimensionnel de pointeurs vers un groupe de tableaux unidimensionnels séparés d'entiers, et "The System" peut comprendre ce que je veux dire quand je demande:
someNumbers[4][2];
Mais quand je déclare statiquement un tableau 2D, comme dans la ligne suivante ...:
int someNumbers[ARRAY_ROWS][ARRAY_COLUMNS];
... une structure similaire est-elle créée sur la pile ou est-elle complètement d'une autre forme? (c'est-à-dire est-ce un tableau 1D de pointeurs? Sinon, qu'est-ce que c'est, et comment les références sont-elles déterminées?)
De plus, quand j'ai dit «Le système», qu'est-ce qui est réellement responsable de le découvrir? Le noyau? Ou le compilateur C le trie-t-il lors de la compilation?
malloc()
ne donnent pas un tableau à N dimensions. . Il en résulte des tableaux de pointeurs [vers des tableaux de pointeurs [...] pour séparer complètement les tableaux unidimensionnels . Consultez Allocation correcte de tableaux multidimensionnels pour voir comment allouer un tableau TRUE N-dimensionnel.