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