Массив имеет фиксированный размер и может быть расширен только через realloc или malloc/memcpy, как уже говорили другие. Существуют различные схемы для повышения эффективности, которые обычно требуют, чтобы массив был непрозрачным и управлялся набором функций.
Если вам нужен только список, то FreeBSD queue primitives, вероятно, хорошее место для начала, они предоставляют списки с одним и двумя ссылками. Код - это один заголовок file. В любом случае он показывает, как реализовать надежный примитив list/queue.
Существуют различные библиотеки для управления коллекциями, такие как GTK/Glib, но это связано с целым рядом других проблем, которые могут вам понадобиться или не нуждаться.
Конечный функционал высокого уровня C, вероятно, libCello, если вы не возражаете подталкивать язык к его границам.
Массивы не являются списками. Запомни. – fuz