Разница во времени жизни и в месте размещения в памяти такого массива.
Динамический массив размещается в куче и живёт до тех пор, пока вы его руками не удалите (вызовом
free(a)
).
Статический* массив живёт на стеке и удаляется при выходе переменной из области видимости. Плюс ко всему, поскольку стек обычно имеет ограниченный размер, создание очень большого статического массива приведёт к ошибке переполнения стека (stack overflow).
P. S. Только такой массив называется не статический, а
Variable Length Array (массив переменной длины).