K.N King第六章习题6:for循环执行逻辑及输出异常疑问
C语言for循环执行顺序答疑
1. for循环第三个表达式的执行时机
C语言中for循环的执行流程是严格按以下步骤走的:
- 首先执行初始化表达式(for括号里的第一个部分),这一步仅在循环启动前执行一次。
- 接着判断条件表达式(第二个部分):如果结果为真,进入循环体执行代码;如果为假,直接终止循环。
- 当循环体的所有代码执行完毕后,才会执行第三个表达式(循环变量更新语句)。
- 之后回到条件判断步骤,重复上述流程直到条件为假。
直白点说:第三个表达式是在每一轮循环体执行结束后才运行,绝非进入循环体之前。
2. 代码输出与预期不符的原因
先看你写的代码:
#include <stdio.h> int main(void) { for (int i = 1; i<=128; i *= 2) printf("%d\n", i); }
我们拆解第一次循环的完整过程:
- 初始化
i=1,这一步只做一次。 - 判断
i<=128,1满足条件,进入循环体。 - 执行循环体的
printf语句,此时i的值还是1,所以输出1。 - 循环体执行完后,才会执行
i *=2,把i更新为2。
接下来的循环会重复这个逻辑:先判断i是否满足条件,满足就输出当前i的值,再更新i。所以第一次输出必然是1,而不是你预想的2——你搞反了循环体和变量更新语句的执行顺序。
内容的提问来源于stack exchange,提问作者userac67
相关产品推荐
相关产品推荐

