Variable length arrays are not initialized by default and cannot be initialized explicitly, except that memory allocation routines such as calloc
may initialize the space.
C 2018 6.7.6.2 (“Array declarators”) 2 says:
… If an identifier is declared to be an object with static or thread storage duration, it shall not have a variable length array type.
So the storage duration of a variable length array must be one of the other storage durations: automatic or allocated [6.2.4 1]. (There is a temporary storage duration, but only for structures or unions [6.2.4 7].)
6.7.9 10 says objects with automatic storage duration are not initialized by default:
If an object that has automatic storage duration is not initialized explicitly, its value is indeterminate…
Additionally, 6.7.9 3 says you cannot initialize variable length arrays explicitly:
The type of the entity to be initialized shall be an array of unknown size or a complete object type that is not a variable length array type.