for循环缺少初始化

时间:2010-09-25 02:17:22

标签: c

我见过

for(;;)

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

为什么这样空白。感谢。

6 个答案:

答案 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(;;)

相同