En C, sé que puedo asignar dinámicamente una matriz bidimensional en el montón usando el siguiente código:
int** someNumbers = malloc(arrayRows*sizeof(int*));
for (i = 0; i < arrayRows; i++) {
someNumbers[i] = malloc(arrayColumns*sizeof(int));
}
Claramente, esto en realidad crea una matriz unidimensional de punteros a un conjunto de matrices unidimensionales separadas de enteros, y "El Sistema" puede entender a qué me refiero cuando pido:
someNumbers[4][2];
Pero cuando declaro estáticamente una matriz 2D, como en la siguiente línea ...:
int someNumbers[ARRAY_ROWS][ARRAY_COLUMNS];
... ¿se crea una estructura similar en la pila, o es de otra forma completamente? (es decir, ¿es una matriz de punteros 1D? Si no es así, ¿qué es y cómo se resuelven las referencias?)
Además, cuando dije: "El sistema", ¿qué es realmente responsable de resolver eso? El grano? ¿O el compilador de C lo soluciona mientras compila?
malloc()
no dan como resultado una matriz N-dimensional. . Resulta en conjuntos de punteros [a conjuntos de punteros [...] para separar completamente conjuntos unidimensionales . Consulte Asignación correcta de matrices multidimensionales para ver cómo asignar matrices VERDADERAS de N dimensiones.