The obvious answer is that one has a constant size while the
other does not. More specifically, a fixed-size array is one where
the size is known at compile time and does not change at runtime.
By contrast, the size of a variable-sized array may or may not be
known at compile time but may change at runtime.
We often refer to a variable-size array as being a dynamic
array, however some people (myself included) incorrectly refer to a
fixed-size array as being a static array. The misunderstanding
largely comes from the fact that we often refer to the heap (or
free store) as being dynamic memory because all dynamic variables
are allocated there (including variable-size arrays). But the term
dynamic array does not refer to the memory, it refers to the
dynamic -- as in changeable -- nature of the array itself.
By contrast, a fixed-size array is only deemed static if it is
statically allocated, in which case it will be allocated in the
program's data segment along with all other static variables,
global variables and constants. But a local fixed-size array is
allocated on the program's stack and is therefore, by definition,
non-static. Moreover, you can allocate a fixed-size array on the
heap!