Почему можно генерировать массив динамического размера таким образом?
Нет, это
int array[size]; /* this doesn't get stored in heap section */
, где size
- целое число времени выполненияКонстанта не является динамическим массивом , он называется Массив переменной длины и был введен в C99 . Динамический массив создается только путем вызова либо malloc()
, либо calloc()
, который получает адрес из heap раздела первичной памяти.
Почему это разрешеноиспользовать размер переменной не константы для размера массива?
Да, C99
и далее VLA
может иметь size
как неконстантную переменную.Но вы не можете изменить (изменить размер) размер VLA
после объявления в отличие от динамического массива (можно использовать realloc()
).