En C, sé que puedo asignar dinámicamente una matriz de dos dimensiones en el montón usando el siguiente código:¿Cómo se formatean matrices multidimensionales en la memoria?
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 manojo de uno separado dimensionales de números enteros, y "el Sistema" se puede averiguar 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 un conjunto de punteros 1D? En caso negativo, ¿qué es y cómo se resuelven las referencias a él?)
También, cuando dije "El sistema", ¿qué es realmente responsable de calcular eso? ¿fuera? El kernel? ¿O el compilador de C lo resuelve durante la compilación?
Daría más de +1 si pudiera. –
** Advertencia **: ¡No hay una matriz 2D en este código! – Olaf