给定标准链表,其中"apples"是具有(->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("%dn", a->value); }
循环如何工作?list_begin函数只返回苹果的第一个 ->。这;一个;正如条件语句所说,如果不是 0,那么继续 for 循环?最后一部分将 指向循环中的下一个元素。因此,当循环的最后一个值为 a=0 时,什么会终止 for 循环?
这有意义吗?
for
循环用于从第一个节点遍历到最后一个节点(直到(找到NULL
(它用于遍历整个链表(。
第一个参数:a = (apple *) list_begin(&apples)
将a
放在该列表的开头。
第二个参数:a
是一个条件,当到达最后一个节点时会违反它,因为它将被NULL
。
thirst 参数:a = (apple *) list_next(&a->header)
用于向下遍历列表。
for 的文档将帮助您:
for ( init_clause ; cond_expression ; iteration_expression ) loop_statement
解释
行为如下:
...cond_expression在环体之前进行评估。如果表达式的结果为零,则立即退出循环语句。
在您的情况下,cond_expression
只是a
,当a
为零(如果是指针,则为 NULL(时,循环退出。