У 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 масив покажчиків? Якщо ні, що це таке, і як з'ясовуються посилання на нього?)
Крім того, коли я сказав: "Система", що насправді відповідає за з'ясування цього? Ядро? Або компілятор С розбирається під час компіляції?
malloc()
не призводять до N-мірного масиву. . Це призводить до того, що масиви покажчиків [до масивів покажчиків [...]] повністю розділяють одновимірні масиви. Див. Розділ Правильне розподіл багатовимірних масивів, щоб побачити, як розподілити ІСТИНА N-мірний масив.