С учетом стандартного связанного списка, где «apple» - это список с (-> first и -> last свойствами), а «apple» - это элемент этого списка с (-> next свойством). Как это работает для цикла?
typedef struct
{
list_element header;
int value;
} apple;
int main()
{
list apples;
apple * a = (apple *) malloc(sizeof(apple));
apple * b = (apple *) malloc(sizeof(apple));
apple * c = (apple *) malloc(sizeof(apple));
a->value = 1;
b->value = 2;
c->value = 3;
list_init(&apples);
list_push_back(&apples, &a->header);
list_push_back(&apples, &b->header);
list_push_back(&apples, &c->header);
for (a = (apple *) list_begin(&apples); a; a = (apple *) list_next(&a->header))
{
printf("%d\n", a->value);
}
Как это работает для цикла? Функция list_begin просто возвращает -> первый из яблок. А; как говорит условный оператор, если не 0, тогда продолжить цикл for? и последняя часть указывает на его следующий элемент в цикле. Поэтому, когда последнее значение цикла равно a = 0, это то, что завершит цикл for?
Имеет ли это смысл?