Я думал, что понимаю, что такое VLA, пока не увидел заданный здесь вопрос о разнице между динамическим c распределением памяти и массивами переменной длины. Так что у меня нет проблем, по крайней мере, на данный момент, с динамическим c распределением памяти, но я не понимаю, почему этот код считается VLA:
int size = 10; // or whatever
int my_array [size] ; // why this is a VLA
Более загадочный Дело в том, что это даже должен быть VLA
const int size = 10;
int my_array [size]; // why even when i use a const it is a VLA .
Итак, мой вопрос, как эти два разных метода считаются VLA?
Насколько я знаю, VLA - это просто массив, размер которого известен только во время выполнения, например, если я предлагаю пользователю ввести размер массива и установить массив на этот размер, чтобы компилятор никогда не узнал размер массива .
Но в обоих фрагментах кода выше size
уже известен во время компиляции, поэтому, если это правда, что это VLA, стандартный синтаксис массива должен быть таким и ничего больше.
int my_array[10];
Другой вопрос: я слышал, что const int size =10;
на самом деле не является константой, что означает, что компилятор не знает, равен ли этот размер 10, он рассматривает его как переменную.
Итак, если кто может прояснить ситуацию, ты p немного о разнице между переменной и константой в C ++, это было бы очень полезно.
ПРИМЕЧАНИЕ: это ссылка на вопрос StackOverflow. Итак, если в этом вопросе что-то не так, кто-то может исправить это.
В чем разница между VLA и динамическим c выделение памяти через mallo c?