for循环缺少初始化

我见过

for(;;) 

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

为什么这样空白。 谢谢。

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()等,循环仍将被中断…

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

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

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

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

这样做的原因是因为当for循环中的中间条件为空时,它被解释为始终为真。

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

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

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

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

它意味着永远

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

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

这里用分号分隔的三个控制表达式是从左到右的初始化表达式,循环测试表达式和计数表达式。 初始化程序在循环开始时恰好评估一次。 循环测试表达式在每次迭代开始时通过循环进行计算,并确定循环何时退出。 最后,计数表达式在每次循环迭代结束时进行计算 – 即使调用了continue – 并且通常负责更改循环变量。

在提供这种类型的for循环的大多数语言中,三个控制循环表达式中的每一个都是可选的。 省略时,循环测试表达式始终为true,而初始化程序和计数表达式在省略时被视为no-ops。 语法中的分号足以表示省略其中一个表达式。

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