2010-09-25 100 views
5

我见过for循环缺失的初始化

for(;;) 

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

为什么是空白这样。谢谢。

+0

对于当前所有的答案:我觉得他真的想知道的空白是什么。 – 2010-09-25 02:21:12

回答

17

for语句的工作方式:

for (initialization; test-condition; update)

而且任何或所有这三个可以省略(左空白)。所以:

  • for (;;)是一个无限循环相当于while (true) 因为没有测试条件。实际上,for (int i=0; ;i++)也将是一个无限循环。

  • for (; *s != '\0'; s++)是一个没有初始化的循环。 s将指向(可能)一个字符串的开始位置并递增,直到它到达表示字符串结束的空字符。这本质上通过,如果有一个break声明循环体,或exit()通话等仍将对循环被打断字符串s

的所有字符意味着环......

+1

'\ 0'是'NUL'字符.'NUL'和'NULL'是不同的。 – 2010-09-25 03:54:47

+3

@Prasoon有些人(比如我自己)把它称为[空字符](http://en.wikipedia.org/wiki/Null_character) – NullUserException 2010-09-25 04:02:27

1

这意味着永远做

for(initial condition; increment; end condition);您可以省略任何这些

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

三个控制表达式, 用分号隔开这里,从 左至右初始化 表达式,循环测试表达式, 和计数表达。 初始值设定项在循环开始时恰好在 之前进行一次评估。 循环测试表达式在 开始每个迭代 通过循环评估,并确定何时 循环应该退出。最后, 计数表达式在 每个循环迭代结束时评估 - 即使 (如果继续调用) - 通常是 负责更改变量循环 变量。

在提供此类循环的大多数语言中,三个 控制循环表达式都是可选的。 当省略时,回路测试表达式 始终为真,而 初始值设定项和计数表达式 在省略时视为无操作。 语法中的分号是 足以表示省略 其中一个表达式。

4

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

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

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

2

空白的零件基本上什么都不做。因此for (;;)创建了一个无限循环,它根本不会执行任何操作,并且因为循环中没有条件而不会退出。你的第二个例子:

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

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

6

它是“空白的”,因为代码的作者留下了空白。作者不希望/不需要在for声明的相应部分做任何事情,因此它留空。

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

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

1

while(1)while(true)是一样的for(;;)