In C, so di poter allocare dinamicamente un array bidimensionale sull'heap usando il seguente codice:
int** someNumbers = malloc(arrayRows*sizeof(int*));
for (i = 0; i < arrayRows; i++) {
someNumbers[i] = malloc(arrayColumns*sizeof(int));
}
Chiaramente, questo in realtà crea una matrice unidimensionale di puntatori a un gruppo di matrici unidimensionali separate di numeri interi e "Il sistema" può capire cosa intendo quando chiedo:
someNumbers[4][2];
Ma quando dichiaro staticamente un array 2D, come nella seguente riga ...:
int someNumbers[ARRAY_ROWS][ARRAY_COLUMNS];
... una struttura simile viene creata nello stack o è completamente di un'altra forma? (ovvero è un array 1D di puntatori? In caso contrario, che cos'è e come vengono individuati i riferimenti ad esso?)
Inoltre, quando ho detto "Il sistema", che cosa è effettivamente responsabile di capirlo? Il nocciolo? O il compilatore C lo ordina durante la compilazione?
malloc()
non determinano un array N-dimensionale. . Si traduce in matrici di puntatori [in matrici di puntatori [...]] per separare completamente matrici unidimensionali . Vedere Allocazione corretta di array multidimensionali per vedere come allocare un array N-dimensionale VERO .