C программирование Связанный список для цикла - PullRequest
0 голосов
/ 12 сентября 2018

С учетом стандартного связанного списка, где «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?

Имеет ли это смысл?

Ответы [ 2 ]

0 голосов
/ 12 сентября 2018

Цикл for предназначен для прохождения от первого узла к последнему узлу (до тех пор, пока он не найдет) NULL (для обхода всего связанного списка) ..

Первый параметр: a = (apple *) list_begin(&apples) помещает a в начало этого списка.

Второй параметр: a - это условие, которое нарушается при достижении одного последнего узла, так как оно будет NULL.

Параметр жажды: a = (apple *) list_next(&a->header) предназначен для обхода списка.

0 голосов
/ 12 сентября 2018

Документация для поможет вам:

for ( init_clause ; cond_expression ; iteration_expression ) loop_statement 

Объяснение
Ведет себя следующим образом:
... cond_expression оценивается передтело петли.Если результат выражения равен нулю, оператор цикла завершается немедленно.

В вашем случае cond_expression равен просто a, а когда a равно нулю (илиNULL в случае указателя) цикл завершается.

...