¿Por qué, o cuándo, necesita asignar dinámicamente la memoria en C?

La asignación de memoria dinámica es un tema muy importante en la programación de C Sin embargo, no he podido encontrar una buena explicación de lo que esto nos permite hacer, o por qué es necesario.

¿No podemos simplemente declarar variables y estructuras y nunca tener que usar malloc ()?

Como nota al margen, ¿cuál es la diferencia entre:

ptr_one = (int *)malloc(sizeof(int));

y

int *ptr_one = malloc(sizeof(int));

Respuestas a la pregunta(3)

Su respuesta a la pregunta