【问题标题】:C programming Linked list for loopC编程链表for循环
【发布时间】: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


【解决方案1】:

for 循环用于从第一个节点遍历到最后一个节点(直到)找到NULL(它用于遍历整个链表)..

第一个参数:a = (apple *) list_begin(&apples) 将a 放在该列表的开头。

第二个参数:a 是一个条件,它在到达最后一个节点后被违反,因为它将是NULL。

thirst 参数:a = (apple *) list_next(&a->header) 用于遍历列表。

【讨论】:

    【解决方案2】:

    for 的文档将为您提供帮助:

    for ( init_clause ; cond_expression ; iteration_expression ) loop_statement 
    

    说明
    行为如下:
    ... cond_expression 在循环体之前计算。如果表达式的结果为零,则立即退出循环语句。

    在您的情况下,cond_expression 只是 a,当 a 为零(或指针的情况下为 NULL)时,循环退出。

    【讨论】:

      猜你喜欢
      • 2017-07-29
      • 1970-01-01
      • 2016-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-11
      • 2012-01-05
      • 1970-01-01
      相关资源
      最近更新 更多