Por que, ou quando, você precisa alocar memória dinamicamente em C?

Alocação de memória dinâmica é um tópico muito importante na programação C. No entanto, não consegui encontrar uma boa explicação sobre o que isso nos permite fazer, ou porque é necessário.

Não podemos simplesmente declarar variáveis ​​e estruturas e nunca ter que usar malloc ()?

Como uma nota lateral, qual é a diferença entre:

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

e

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

questionAnswers(3)

yourAnswerToTheQuestion