以下 for 语句在 C 中产生什么输出?

What output does the following for statement produce in C?

我预计它会产生:

10 5 3 2 1

而是打印

10 5 3 2 1 1 1 1 1 1 1 1 1...

为什么?

#include <stdio.h>

int main(void)
{
    int i;

    for(i = 10; i >= 1; i /= 2)
        printf("%d ", i++);

    return 0;
}

打印2,加1=3,除以2=1,1=1,打印1,加1=2,除以2=0,=0小于1,循环结束。

i 为 1 时,您使用 printf 语句打印它。然后 i 递增(通过 printf 语句中的 ++ 运算符)。然后执行 i /= 2,结果为 i = 2 / 2,结果为 1。这满足你的条件i >= 1,使其成为一个无限循环。

i /= 2 变为 1 时,循环体将打印 1 并将 i 递增 1。这将永远不会让 i /= 2 的值小于 1,因此 i 的值和循环将无限迭代。

i 不断增加到 2 并除以 2,这会产生无限循环。