for循环缺失的初始化
的for
语句的工作方式:
for (initialization; test-condition; update)
而且任何或所有这三个可以省略(左空白)。所以:
for (;;)
是一个无限循环相当于while (true)
因为没有测试条件。实际上,for (int i=0; ;i++)
也将是一个无限循环。for (; *s != '\0'; s++)
是一个没有初始化的循环。s
将指向(可能)一个字符串的开始位置并递增,直到它到达表示字符串结束的空字符。这本质上通过,如果有一个break
声明循环体,或exit()
通话等仍将对循环被打断字符串s
的所有字符意味着环......
'\ 0'是'NUL'字符.'NUL'和'NULL'是不同的。 – 2010-09-25 03:54:47
@Prasoon有些人(比如我自己)把它称为[空字符](http://en.wikipedia.org/wiki/Null_character) – NullUserException 2010-09-25 04:02:27
这意味着永远做
for(initial condition; increment; end condition);您可以省略任何这些
见http://en.wikipedia.org/wiki/For_loop
三个控制表达式, 用分号隔开这里,从 左至右初始化 表达式,循环测试表达式, 和计数表达。 初始值设定项在循环开始时恰好在 之前进行一次评估。 循环测试表达式在 开始每个迭代 通过循环评估,并确定何时 循环应该退出。最后, 计数表达式在 每个循环迭代结束时评估 - 即使 (如果继续调用) - 通常是 负责更改变量循环 变量。
在提供此类循环的大多数语言中,三个 控制循环表达式都是可选的。 当省略时,回路测试表达式 始终为真,而 初始值设定项和计数表达式 在省略时视为无操作。 语法中的分号是 足以表示省略 其中一个表达式。
for(;;)
是一个无限循环。它实际上与while (true)
完全相同。
这个原因起作用的原因是因为当for
循环中的中间条件为空时,它被解释为始终为真。
for (; *s != '\0'; s++)
用于字符逐字符读取。这种方法可行,因为每个C字符串都以空字符结尾(\0
)。
空白的零件基本上什么都不做。因此for (;;)
创建了一个无限循环,它根本不会执行任何操作,并且因为循环中没有条件而不会退出。你的第二个例子:
for (; *s != '\0'; s++)
只是一个没有任何初始化表达式的正常循环。这取决于s
已经具有初始值并且只是循环直到到达字符串的末尾这一事实。
它是“空白的”,因为代码的作者留下了空白。作者不希望/不需要在for
声明的相应部分做任何事情,因此它留空。
for (;;)
是一个无限循环的语句(除非它在循环体内部中断)。
for (; *s != '\0'; s++)
是一个不需要初始化部分的语句,因为在for
语句之前所有必需的(如初始值s
)已经被初始化。
while(1)
和while(true)
是一样的for(;;)
对于当前所有的答案:我觉得他真的想知道的空白是什么。 – 2010-09-25 02:21:12