Основная проблема заключается в том, что массивы в C имеют фиксированный размер, установленный при их создании, и этот размер нельзя изменить. Таким образом, нет способа «добавить» к массиву.
Обычный способ справиться с этим - создать массив максимального размера (или емкости) и отслеживать «используемую» часть массива с помощью отдельная переменная (часто называемая размером). В любой момент времени элементы массива от 0 до размера-1 «используются» и действительны, в то время как элементы от размера до емкости-1 «свободны» и могут содержать значения мусора, которые будут игнорироваться.
Поскольку массив и переменная размера так тесно связаны, их обычно объединяют в структуру, чтобы упростить управление:
#define MAX_ARRAY_SIZE 100
struct long_array {
size_t size;
long data[MAX_ARRAY_SIZE];
};
Теперь вы можете инициализировать пустой массив с помощью struct long_array odd = { 0 };
, и вы затем можно было бы добавить к этому массиву
if (odd.size == MAX_ARRAY_SIZE) {
/* always check for errors or unexpected situations! */
fprintf(stderr, "array overflow\n");
exit(1); }
odd.data[odd.size++] = new_value;
, конечно, это приведет к выделению максимальной суммы для каждого массива, поэтому ограничение должно быть довольно небольшим. Вы можете сделать это более гибким, выделив массив в куче и сохранив емкость в массиве, а также размер:
struct long_array {
size_t size, capacity;
long *data;
};
, но это требует большего управления, чтобы отслеживать, когда необходимо изменить размер массива или освобожден.