В Си я знаю, что могу динамически распределить двумерный массив в куче, используя следующий код:
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];
... создается ли подобная структура в стеке или она полностью другой формы? (то есть это одномерный массив указателей? Если нет, то что это, и как выяснить ссылки на него?)
Кроме того, когда я сказал: «Система», что на самом деле отвечает за это? Ядро? Или компилятор C разбирает его во время компиляции?
malloc()
не приводят к N-мерному массиву. , Это приводит к массивам указателей [к массивам указателей [...]] для полного разделения одномерных массивов. См. Правильное размещение многомерных массивов, чтобы узнать, как распределить ИСТИННЫЙ N-мерный массив.