【发布时间】:2019-02-16 15:28:23
【问题描述】:
给定标准链表,其中“apples”是具有(->first 和->last 属性)的列表,而“apple”是该列表中具有(->next 属性)的元素。这个 for 循环是如何工作的?
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); }
这个 for 循环是如何工作的? list_begin 函数只返回 ->first 的苹果。 ;一个;正如条件语句所说,如果不是 0 则继续 for 循环?最后一部分将 a 指向循环中的下一个元素。那么当循环的最后一个值为 a=0 时,会终止 for 循环吗?
这有意义吗?
【问题讨论】:
-
是的。你有什么问题?是什么让您怀疑自己的解释?
-
是的... for 的第二个参数令人困惑,像
a != NULL这样更合适 -
非常感谢大家。这让我挂了,因为它在一些代码中,我无法弄清楚它为什么会终止。我不确定 C 是否终止了中间语句为“0”的 for 循环
-
在 C 中,
0为假,任何其他值为真。只要测试为真,循环就会重复。
标签: c for-loop struct linked-list