【问题标题】:for loop missing initializationfor 循环缺少初始化
【发布时间】:2010-09-25 02:17:21
【问题描述】:

我见过

for(;;)

for ( ; *s != '\0'; s++)

为什么它是空白的。谢谢。

【问题讨论】:

    标签: c


    【解决方案1】:

    for 语句的工作方式如下:

    for (initialization; test-condition; update)

    这三个中的任何一个或全部都可以省略(留空)。所以:

    • for (;;) 是一个无限循环1 等价于while (true),因为没有测试条件。事实上,for (int i=0; ;i++) 也将是一个无限循环1

    • for ( ; *s != '\0'; s++) 是一个没有初始化的循环。 s 将指向(可能)字符串的开头并递增,直到到达表示字符串结尾的空字符 '\0'。这实质上意味着遍历字符串s的所有字符

    1如果循环体中有break语句,或者对exit()的调用等,循环仍然会被中断......

    【讨论】:

    • \0NUL 字符。NULNULL 是不同的。
    • @Prasoon 有些人(比如我自己)就叫它null character
    【解决方案2】:

    它是“那样的空白”,因为代码的作者将其留空。作者不想/不需要在for语句的相应部分做任何事情,所以留空。

    for (;;) 是一个无限迭代的语句(除非它被循环体内部中断)。

    for ( ; *s != '\0'; s++) 是一个不需要初始化部分的语句,因为所有必要的东西(如s 的初始值)都已经在for 语句之前初始化了。

    【讨论】:

      【解决方案3】:

      for(;;) 是一个无限循环。它实际上与while (true) 完全相同。

      之所以如此,是因为当for 循环中的中间条件为空时,它被解释为始终为真。

      for ( ; *s != '\0'; s++) 用于逐字符读取字符串。这种方法有效,因为每个 C 字符串都以空字符 (\0) 结尾。

      【讨论】:

        【解决方案4】:

        空白的部分基本上什么都不做。所以for (;;) 创建了一个什么都不做的无限循环,并且永远不会退出,因为循环中没有条件。你的第二个例子:

        for ( ; *s != '\0'; s++)
        

        只是一个没有任何初始化表达式的普通循环。这依赖于 s 已经有一个初始值并且只是循环直到它到达字符串末尾的事实。

        【讨论】:

          【解决方案5】:

          while(1)while(true)for(;;) 相同

          【讨论】:

            【解决方案6】:

            意思是永远做下去

            for(初始条件;增量;结束条件);您可以省略其中任何一个

            http://en.wikipedia.org/wiki/For_loop

            三个控制表达式, 这里用分号隔开,来自 从左到右初始化器 表达式,循环测试表达式, 和计数表达式。这 初始化器只计算一次 就在循环的开始。这 循环测试表达式在 每次迭代的开始 通过循环,并确定何时 循环应该退出。最后, 计数表达式在 每次循环迭代的结束 - 甚至 如果 continue 被调用 - 通常是 负责改变循环 变量。

            在大多数提供此功能的语言中 for 循环的类型,三个中的每一个 控制循环表达式是可选的。 省略循环测试表达式时 被认为总是正确的,而 初始化器和计数表达式 省略时被视为无操作。 语法中的分号是 足以表明遗漏 表达式之一。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2013-09-03
              • 1970-01-01
              • 1970-01-01
              • 2011-04-02
              • 2012-01-02
              • 2021-12-08
              相关资源
              最近更新 更多