Dlaczego lub kiedy trzeba dynamicznie przydzielać pamięć w C?

Dynamiczna alokacja pamięci jest bardzo ważnym tematem w programowaniu C. Nie udało mi się jednak znaleźć dobrego wyjaśnienia tego, co pozwala nam to zrobić, ani dlaczego jest to wymagane.

Czy nie możemy po prostu zadeklarować zmiennych i struktur i nigdy nie musimy używać malloc ()?

Na marginesie, jaka jest różnica między:

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

i

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

questionAnswers(3)

yourAnswerToTheQuestion