for循环中的第三个表达式什么时候执行?

问题描述 投票:0回答:1

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。为什么会这样?

c for-loop
1个回答
0
投票

for (int i = 1; i<=128; i *= 2)
中的表达式不是按从左到右的顺序计算的,就好像计算机只是扫描文本并立即执行每件事一样。相反,本文描述循环结构。
for
语句告诉编译器构造一个循环的表示,如下所示:

  • 定义一个名为
    int
    i
    并将
    1
    分配给它。
  • i<=128
    评估为 true 时:
    • 执行循环体。
    • i
      乘以 2,并将结果赋给
      i

因此,当在循环体的第一次迭代中执行

printf
时,
i
的值为 1,因为
i *= 2
直到循环体的每次迭代之后才会计算。

© www.soinside.com 2019 - 2024. All rights reserved.