In C99, when a programmer declares an array, the dimension of the array can be determined by any valid integer expression, including the expression whose value can only be determined at runtime. This kind of array is called variable length array.
However, only local arrays can be variable-length, and the dimension of variable-length arrays is constant during the array lifetime. In other words, variable-length arrays are not dynamic, and can only change the size of the array, so * can be used to define variable-length arrays with indefinite length.