В C, я знаю, что может динамически выделять двумерный массив в куче, используя следующий код:Как многомерные массивы отформатированы в памяти?
int** someNumbers = malloc(arrayRows*sizeof(int*));
for (i = 0; i < arrayRows; i++) {
someNumbers[i] = malloc(arrayColumns*sizeof(int));
}
Очевидно, что это на самом деле создает одномерный массив указателей на кучу отдельных одно- одномерные массивы целых чисел, и «система» может понять, что я имею в виду, когда я прошу:
someNumbers[4][2];
Но когда я статический объявить 2D массив, как в следующей строке ...:
int someNumbers[ARRAY_ROWS][ARRAY_COLUMNS];
... аналогичная структура создается в стеке, или это полностью другая форма? (т. е. является ли это 1D массивом указателей? Если нет, то что это такое и как делают ссылки на него?)
Также, когда я сказал «Система», то, что на самом деле отвечает за выяснение того, что вне? Ядро? Или компилятор C разбирает его во время компиляции?
Я бы дал больше, чем +1, если мог. –
** Предупреждение **: в этом коде нет 2D-массива! – Olaf