The C standard that introduced variable-length arrays was C99. It allowed an array’s size to be determined at runtime rather than fixed when the program was compiled.
A VLA can be declared using a value such as `int values[n];`, where `n` is calculated during execution. This was useful for numerical algorithms and functions handling input whose size was not known in advance. VLAs usually have automatic storage duration, so their lifetime commonly ends when the surrounding function returns.
A common mix-up is C11: it retained VLAs as a conditional feature, meaning an implementation could decline to support them. C99 was the standard that introduced them, while C23 changed the rules again by making VLA types mandatory but leaving some automatic-storage VLA objects optional. VLAs are also different from growable heap-based arrays, which can be resized during execution.