C99 позволяет определять массивы с непостоянным размером, то есть размер, используемый для определения массива, может меняться во время выполнения. Фрагмент кода, чтобы объяснить, что это будет,массивы переменной длины в C и их инициализация
void dummy_function1(unsigned int length) {
char arrA[length]; //Allowed
.
.
}
Однако, это не позволяет инициализировать его на месте, т.е.
void dummy_function2(unsigned int length) {
char arrA[length]={0}; //Not Allowed, compiler throws an error
char arrB[10]={0}; //Allowed
.
}
Я не понимаю, почему это различие в поведении для массива, который является переменной длина и постоянная длина. В обоих случаях массив будет иметь память при вызове функции.
'length' - это не постоянная времени компиляции. Он будет вводиться пользователем во время выполнения. При компиляции значение времени 'length' не известно компилятору. – haccks
Это не дубликат предлагаемых оригинальных вопросов. Эти вопросы задают вопрос о том, почему массив переменной длины не может быть инициализирован. В этом вопросе конкретно спрашивается, почему стандарт C не предусматривает инициализацию массива переменной длины. –