Существует два способа выделения памяти массиву, размер которого изначально неизвестен. Самый распространенный способ - использовать malloc
вот так
int * array;
... // when we know the size
array = malloc(size*sizeof(int));
Но в C99 также допустимо определять массив после того, как мы знаем его размер.
... // when we know the size
int array[size];
Они абсолютно одинаковы?