C语言中for循环后添加分号为何会导致执行结果差异巨大?
C语言中for循环后添加分号为何会导致执行结果差异巨大?
咱们先直观对比两段代码和它们的输出:
第一段代码(正常输出0-4)
int i; for (i = 0; i < 5; i++) { printf(" %d \n", i); }
输出:
0 1 2 3 4
第二段代码(输出5)
int i; for (i = 0; i < 5; i++); { printf(" %d \n", i); }
输出:
5
核心原因:分号代表「空语句」
在C语言里,分号;本身就是一个完整的语句——我们叫它「空语句」,表示“什么都不做”。
- 第一段代码里,
for循环后面紧跟的是大括号{},这整个大括号就是循环的执行体,每次循环都会跑一遍里面的printf,所以i从0到4的时候各打印一次,就得到了0-4的输出。 - 第二段代码里,
for循环后面多了个分号;,这就相当于告诉编译器:“这个for循环的执行体就是这个空语句,循环5次啥都不用做”。后面的大括号{}已经和for循环没关系了,它是一个独立的代码块,等for循环跑完(此时i已经变成5了),才会执行一次里面的printf,所以最终只输出5。
简单说就是:分号把循环体和后面的代码“切割”开了,循环白跑了5次,真正要执行的打印代码变成了循环结束后的单次执行~
备注:内容来源于stack exchange,提问作者Brando Lui
相关产品推荐
相关产品推荐

