2016-05-12 3 views
4
#include <stdio.h> 

int main(void) 
{ 
    int a=17; 
    scanf("%d",&a); 

    int arr[a]; 

    printf("%lu", sizeof(arr)); 
} 

Память для массива «arr» должна выделяться во время компиляции, но в этом случае она принимает значение «a» от пользователя (время выполнения) и выделяет один и тот же размер для массив. Просьба уточнить.выделение памяти для массива в c

ответ

6

Да, это известно как массив переменной длины. Он был стандартным в C с C99.

Поэтому нет, память не должна выделяться во время компиляции для кода, подобного этому. Конечно, это было бы невозможно.

Также значения типа size_t (например, генерируемые оператором sizeof) должны быть напечатаны с использованием %zu.