理解c中for循环的这种形式



我在c中遇到了这个For循环,我很难理解它这是循环上下文:循环正在遍历链接列表

POINTER **prev=head, *curr, *next;
 for(curr = *head; curr; prev = &curr->link, curr = curr->link)

据我所知,curr将从列表的开头开始。什么是curr;?这只是意味着当前指针不是NULL吗?通常在该部分中,它将类似于i < 5;

最后,prev = &curr->link, curr = curr->link-我从来没有见过逗号分隔增量(如果是这样的话(,我也不明白那个部分在做什么。

有人能帮我打破这个循环,帮助我了解发生了什么吗?

什么是curr;?这只是意味着当前指针不是NULL吗?

正确。for循环的第二个子句是控制表达式,只要控制表达式不等于0,循环就会继续。由于curr是一个指针,因此只有当它是NULL指针时,它才会等于0。

最后,prev = &curr->link, curr = curr->link-我从未见过逗号分隔增量(如果是这样的话(,我也不明白这一部分在做什么。

for循环第三个子句中的逗号是逗号运算符的一个实例。此运算符计算其左操作数,丢弃该操作数的值,然后计算右操作数。在这种情况下,使用逗号运算符可以在一个表达式中为两个变量赋值。

具体地,该表达式将prev指针设置为指向当前节点的link成员的地址,然后将curr指针设置为指针指向列表中的下一个节点。prev是指向指针的指针的原因可能是允许移除当前节点或在当前节点之前插入新节点,同时还允许潜在地更新*head的特殊情况。

紧凑型,不是吗?美丽的

https://en.wikipedia.org/wiki/For_loop#1972:_C/C++

for (initialization; condition; increment/decrement)
    statement

初始化

curr = *head;

在循环开始时执行一次。curr是迭代器,它也从head的任何点开始。

条件

curr;如果curr不是NULL,则为True。如果currNULL,则为False(C中的一个特性,其中0NULL等同于False,而不是0NULL的任何东西等同于True(。在每次循环迭代开始时检查条件。如果为true,则循环再次循环。如果为False,则循环退出。

递增/递减

在这里你会遇到一个奇怪的逗号运算符:https://en.wikipedia.org/wiki/Comma_operator

循环的这一部分在循环迭代结束时执行,然后检查下一次迭代的Condition。使用逗号运算符,这里压缩了两个操作:

prev设置为curr链接(这对我来说是有意义的,尽管我认为prev在这里可能意味着其他东西(:

prev = &curr->link

现在将curr设置为列表中的下一个链接:

curr = curr->link

这样就遍历了链接列表:

  • 初始化:在head启动curr
  • 条件:测试curr是否已到达末尾(即NULL(
  • 回路
  • 递增/递减:将curr移动到下一个链路;在prev中保留上一个链接(什么是curr(
  • 条件:
  • 回路
  • 增量/减量:

相关内容

  • 没有找到相关文章

最新更新