我见过
for(;;)
和
for ( ; *s != '\0'; s++)
为什么这样空白。感谢。
答案 0 :(得分:22)
for
语句的作用如下:
for (initialization; test-condition; update)
这三个中的任何一个或全部都可以省略(留空)。所以:
for (;;)
是一个等于while (true)
的无限循环 1 ,因为没有测试条件。事实上,for (int i=0; ;i++)
也将是一个无限循环 1 。
for ( ; *s != '\0'; s++)
是一个没有初始化的循环。 s
将指向(可能)一个字符串的开头并递增,直到它到达表示字符串结尾的空字符'\0'
。这实质上意味着循环遍历字符串s
1 如果循环体中有break
语句,或者调用exit()
等,循环仍会被中断...
答案 1 :(得分:6)
它是“像那样的空白”,因为代码的作者留空了。作者不希望/需要在for
语句的相应部分中执行任何操作,因此将其留空。
for (;;)
是一个无限循环的语句(除非它从循环体内部中断)。
for ( ; *s != '\0'; s++)
是一个不需要初始化部分的语句,因为必要的所有内容(如s
的初始值)已经在for
语句之前初始化。
答案 2 :(得分:4)
for(;;)
是一个无限循环。它实际上与while (true)
完全相同。
这样做的原因是因为当for
循环中的中间条件为空时,它被解释为始终为真。
for ( ; *s != '\0'; s++)
用于逐个字符地读取字符串。这种方法有效,因为每个C字符串都以空字符结尾(\0
)。
答案 3 :(得分:2)
空白的部分基本上什么都不做。所以for (;;)
创建了一个无限循环,它根本不做什么,并且永远不会退出,因为循环中没有条件。你的第二个例子:
for ( ; *s != '\0'; s++)
只是一个没有任何初始化表达式的普通循环。这取决于s
已经具有初始值并且只是循环直到它到达字符串末尾的事实。
答案 4 :(得分:1)
这意味着永远
for(初始条件;增量;结束条件);您可以省略这些
中的任何一个请参阅http://en.wikipedia.org/wiki/For_loop
三个控制表达式, 这里用分号隔开,来自 从左到右的初始化器 表达式,循环测试表达式, 和计数表达。该 初始化程序只评估一次 就在循环开始时。该 循环测试表达式在 每次迭代的开始 通过循环,并确定何时 循环应该退出。最后, 计数表达式在 每个循环迭代的结束 - 甚至 如果继续被称为 - 通常是 负责改变循环 变量
在大多数提供此功能的语言中 for循环的类型,三者中的每一个 控制循环表达式是可选的。 省略循环测试表达式时 被视为永远是真实的,而 初始化和计数表达式 省略时被视为无操作。 语法中的分号是 足以表明遗漏 其中一个表达方式。
答案 5 :(得分:1)
while(1)
和while(true)
与for(;;)