Em C, eu sei que posso alocar dinamicamente uma matriz bidimensional na pilha usando o seguinte código:
int** someNumbers = malloc(arrayRows*sizeof(int*));
for (i = 0; i < arrayRows; i++) {
someNumbers[i] = malloc(arrayColumns*sizeof(int));
}
Claramente, isso realmente cria uma matriz unidimensional de ponteiros para várias matrizes unidimensionais separadas de números inteiros, e "O sistema" pode entender o que quero dizer quando solicito:
someNumbers[4][2];
Mas quando declaro estaticamente uma matriz 2D, como na seguinte linha ...:
int someNumbers[ARRAY_ROWS][ARRAY_COLUMNS];
... uma estrutura semelhante é criada na pilha ou é de outra forma completamente? (ou seja, é um conjunto de ponteiros 1D? Se não, o que é e como as referências a ele são descobertas?)
Além disso, quando eu disse: "O sistema", o que é realmente responsável por descobrir isso? O kernel? Ou o compilador C resolve isso enquanto compila?
malloc()
não resultam em uma matriz N-dimensional. . Isso resulta em matrizes de ponteiros [para matrizes de ponteiros [...]] para separar completamente matrizes unidimensionais . Consulte Alocação correta de matrizes multidimensionais para ver como alocar TRUE matriz N-dimensional.