K.N King 第 6 章,Ex-6
我写的程序:
#include <stdio.h>
int main(void)
{
for (int i = 1; i<=128; i *= 2)
printf("%d\n", i);
}
当执行这个程序时,由于 i 是 1 并且小于 128,所以它乘以 2。所以首先期望输出是 2,但实际上是 1。为什么会这样?
for (int i = 1; i<=128; i *= 2)
中的表达式不是按从左到右的顺序计算的,就好像计算机只是扫描文本并立即执行每件事一样。相反,本文描述循环结构。 for
语句告诉编译器构造一个循环的表示,如下所示:
int
的 i
并将 1
分配给它。i<=128
评估为 true 时:
i
乘以 2,并将结果赋给 i
。因此,当在循环体的第一次迭代中执行
printf
时,i
的值为 1,因为 i *= 2
直到循环体的每次迭代之后才会计算。