Создайте структуру данных для представления вашего массива или списка. Представьте, что вы говорите на языке OO, и создайте методы доступа и конструкторы для всего, что вам нужно. Внутри этой структуры данных сохраните массив и, как уже говорили другие, когда массив заполнен до предела, выделите новый массив в 2 раза больше и скопируйте в него. Доступ к структуре только через определенные вами процедуры для доступа к ней.
Это способ, которым Java и другие языки делают это. Внутренне, это даже, как Perl реализован в C.
Я собирался сказать, что ваш лучший вариант - поискать библиотеку, которая уже делает это ... возможно, вы можете позаимствовать реализацию Perl на C такого рода структуры данных. Я уверен, что это более хорошо проверено, чем все, что вы или я могли бы свернуть с нуля. :)