The difference between statically declared (static) arrays and dynamically allocated (dynamic) arrays is essentially a small one: a static array variable actually holds an array value, while a dynamic array variable holds a pointer (see Pointers) to an array value. This is indeed a small difference, and it is made less noticeable by a couple of array-related VTS features: automatic pointer dereferencing and automatic index padding (see below). In some cases, these features conveniently make static and dynamic arrays appear and behave identically. In other cases, they unfortunately make static and dynamic arrays that appear alike but behave differently.