Связанный список программирования на C для цикла

Учитывая стандартный связанный список, где «яблоки» - это список со свойствами (-> first и -> last), а «яблоко» - это элемент этого списка со свойством (-> 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 просто возвращает -> первое из яблок. ; A; как говорит условный оператор, если не 0, то продолжить цикл for? а последняя часть указывает на следующий элемент в цикле. Итак, когда последним значением цикла является a = 0, что завершит цикл for?

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

да. В чем твоя проблема? Что заставляет вас сомневаться в своей интерпретации?

Yunnosch 12.09.2018 06:38

Да ... Второй аргумент for сбивает с толку, что-то вроде a != NULL подойдет лучше

coyotte508 12.09.2018 06:38

Отличное спасибо, ребята. Это подвешивало меня, потому что это было в каком-то коде, и я не мог понять, почему он завершился. Я не был уверен, завершил ли C цикл for, где средний оператор равен "0"

maximusg 12.09.2018 06:40

В C 0 - ложь, любое другое значение - истина. Цикл повторяется до тех пор, пока тест верен.

Barmar 12.09.2018 06:43
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
4
1 030
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

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

for ( init_clause ; cond_expression ; iteration_expression ) loop_statement 

Explanation
Behaves as follows:
... cond_expression is evaluated before the loop body. If the result of the expression is zero, the loop statement is exited immediately.

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

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

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

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

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

Другие вопросы по теме