Я читал книгу, когда я обнаружил, что размер массива должен быть предоставлен во время декларации или выделяется из кучи с помощью таНоса в runtime.I написали эту программу в C:Сложность в понимании массивов переменной длиной в C
#include<stdio.h>
int main() {
int n, i;
scanf("%d", &n);
int a[n];
for (i=0; i<n; i++) {
scanf("%d", &a[i]);
}
for (i=0; i<n; i++) {
printf("%d ", a[i]);
}
return 0;
}
Этот код работает нормально.
Мой вопрос в том, как этот код может работать корректно. Разве это не нарушение основной концепции C, размер массива должен быть объявлен до выполнения или распределить его с помощью malloc() во время выполнения. Я не делаю никаких эти две вещи, то почему она работает правильно?
Решение моего вопроса - это массивы переменной длины, которые поддерживаются в C99, но если я играю вокруг кода и ставил оператор int a [n]; выше зсапЕ ("% D, & п), после чего он перестает работать Почему это so.if массивы переменной длины поддерживаются в C
c99 позволяет это. –
Google для VLA .. – SuperSaiyan
Ваша книга, вероятно, говорила о C89; ваш компилятор использует, возможно, C99. Это несколько разные языки (C99 - эволюция C89, C11 - эволюция C99). Одним из отличий является VLA (Variable Length Arrays). – pmg