Язык обычно считается динамическим из-за его системы типов. C статически типизирован. Это означает, что каждая переменная имеет тип, назначенный ей при создании, и этот тип не может быть изменен. Вы не можете поместить данные с плавающей точкой в указатель типа int *. В динамическом языке, таком как Python, данные имеют тип, а переменные - нет. Я могу присвоить строку той же переменной, что и целое число.
Определение, на которое вы ссылаетесь, также говорит о динамическом программировании, то есть добавлении кода во время выполнения. В C невозможно, не думая с точки зрения сборки, добавить новый код после времени компиляции. Ваша программа не может решить, что ей нужна новая функция во время ее выполнения. На таком языке, как Scheme, он может.
* Приведение не учитывается, поскольку вы явно конвертируете тип.