for循环缺少初始化

Mat*_*att 8 c

我见过

for(;;)
Run Code Online (Sandbox Code Playgroud)

for ( ; *s != '\0'; s++)
Run Code Online (Sandbox Code Playgroud)

为什么这样空白.谢谢.

Nul*_*ion 22

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

  • @Prasoon有些人(比如我自己)只称它为[null character](http://en.wikipedia.org/wiki/Null_character) (3认同)

AnT*_*AnT 6

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

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

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


Jus*_*ini 5

for(;;)是一个无限循环。它实际上与while (true).

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

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