Почему можно генерировать массив динамического размера в C? - PullRequest
0 голосов
/ 20 декабря 2018

Я написал следующий c - codesnippet:

#include <stdio.h>

void function(int size){
    int array[size];

    for(int i = 0; i < size; i++){
        printf("%d ", array[i]);

    }
}

int main(){
    int array_size;
    scanf("%d",&array_size);
    function(array_size);

    return 0;

}

Почему возможно создать массив динамического размера таким образом.Обычно я бы использовал malloc, но это также работает.Почему разрешено использовать не константный размер переменной для размера массива?

Ответы [ 2 ]

0 голосов
/ 20 декабря 2018

Почему можно генерировать массив динамического размера таким образом?

Нет, это

int array[size]; /* this doesn't get stored in heap section */

, где size - целое число времени выполненияКонстанта не является динамическим массивом , он называется Массив переменной длины и был введен в C99 . Динамический массив создается только путем вызова либо malloc(), либо calloc(), который получает адрес из heap раздела первичной памяти.

Почему это разрешеноиспользовать размер переменной не константы для размера массива?

Да, C99 и далее VLA может иметь size как неконстантную переменную.Но вы не можете изменить (изменить размер) размер VLA после объявления в отличие от динамического массива (можно использовать realloc()).

0 голосов
/ 20 декабря 2018

Это то, что известно как " Массив переменной длины ".

Автоматические массивы переменной длины поддерживаются с C99

Они объявлены как обычный массив, но длина не постоянна, а место хранения выделено в точке объявления.

Подробнее об этом можно узнать @ gcc.gnu.org

...