while (condition)
statement
语句重复执行。评估每个执行(迭代)条件之前。如果它是假的,while循环结束并继续执行。
在这种情况下,声明为空。语句可以是以分号(;)结尾的单行代码或用大括号({,})括起来的块代码代码
因此,我们会持续评估条件,直到它产生错误。为了理解发生了什么,我们需要检查逗号运算符的工作方式。 (注意,虽然逗号作为一个字符可以用在C中的地方 - 我可以想到函数声明,定义和调用 - 在这种情况下,逗号字符是条件的一部分,因此它作为一个操作符。)
expression1 , expression2
逗号运算符使表达式1先被评估,然后被表达式2,然后返回表达式2的值。我们将评估两个操作数(i ++,i < = 8),并在右操作数解析为真时继续操作。
虽然通常我们使用条件来控制循环的执行,但在这种情况下,条件可能会有其他影响。在我们的情况下,变量i受到每个条件评估的影响。它增加了一个。
我们的例子只有条件操作数的顺序不同,因此操作数结果真的控制了循环的执行。
我们先来看第二个例子。在这种情况下,我们有条件“我++,我< = 8”。这意味着每次评估我们首先增加i,然后检查它是否小于或等于8.因此,在第一次评估条件时,我们将i从0增加到1并得出结论:1 < = 8,所以循环继续。这样构建的循环只能在我变成9时破坏,即。在第9次迭代。
现在至于第一个例子,条件是“i < = 8,++ i”。由于比较没有副作用,因此我们可以按任意顺序执行任意数量的比较,如果这是我们所做的唯一事情,那就是说,如果我们没有按照比较结果的方式或顺序执行任何其他操作,那些比较将毫无用处。与我们的情况一样,我们评估i < = 8,其结果为真或假,但我们没有使用该值,只是继续评估正确的操作数。所以我们的情况实际上等于“i ++”。
这是后增量的一元运算符。它返回我的价值,然后只增加一个。 (所有的保证是这个顺序,当我得到提高时,实际上是一个复杂的问题,并不总是在标准问题上决定的,除非我错了)。所以会发生什么是我们首先检查我是否是真的,然后,无论如何,我们增加一个,然后打破循环或继续。
在C中没有真或假的值,没有布尔类型。如果整数具有非零值,则认为它们为真。
因此,第一次评估“i ++”时,我们得到0,这是错误的。这意味着循环被打破,甚至没有一次迭代。然而,“i ++”的评估使它增加了一个,所以当我们完成while循环时,我已经是1.