Подтвердить что ты не робот

Итерация через массив C

У меня есть массив структур, которые я создал где-то в моей программе.

Позже я хочу выполнить итерацию, но у меня нет размера массива.

Как я могу перебирать элементы? Или мне нужно сохранить размер где-нибудь?

4b9b3361

Ответ 1

Вы можете сохранить размер где-то, или у вас может быть структура со специальным набором значений, который вы используете в качестве часового, так же, как "\ 0" указывает конец строки.

Ответ 2

Если размер массива известен во время компиляции, вы можете использовать размер структуры для определения количества элементов.

struct foo fooarr[10];

for(i = 0; i < sizeof(fooarr) / sizeof(struct foo); i++)
{
  do_something(fooarr[i].data);
}

Если во время компиляции не известно, вам нужно будет где-то сохранить размер или создать специальное значение терминатора в конце массива.

Ответ 3

Это зависит. Если это динамически выделенный массив, т.е. Вы создали его, вызывая malloc, то, как и другие, вы должны либо сохранить размер массива/количество элементов где-то, либо иметь дозорный элемент (структура со специальным значением, которая будет последний).

Если это статический массив, вы можете определить его размер/размер одного элемента. Например:

int array[10], array_size;
...
array_size = sizeof(array)/sizeof(int);

Обратите внимание, что, если он не является глобальным, это работает только в области, в которой вы инициализировали массив, потому что если вы пройдете его к другой функции, она будет разлагаться на указатель.

Надеюсь, что это поможет.

Ответ 4

Я думаю, вы должны где-то хранить размер.

Модель модели с нулевой конечной строкой для определения длины массива - плохая идея. Например, получение размера массива будет O (N), когда это могло бы быть очень легко O (1) в противном случае.

Сказав это, хорошим решением может быть glib Arrays, у них есть дополнительное преимущество автоматического расширения, если вам нужно добавить больше предметов.

P.S. чтобы быть полностью честным, я не использовал много glib, но я думаю, что это (очень) авторитетная библиотека.