for(int i=0 ; i++ ; printf("%d",i));
printf("%d",i);
Run Code Online (Sandbox Code Playgroud)
输出为1.如果我们使i = 1然后有一个荒谬的输出,如果i = -1则输出为01. For循环如何运作?
abe*_*nky 14
for循环的测试部分是i++.
因为++(或增量)是后修复(在变量之后而不是在变量之前写入),所以在评估和测试语句之后发生增量.测试打开0,计算结果为FALSE,因此"循环"存在而不会运行.
接下来,修复后++生效,i从0 更改为1.
正如@paxdiablo所指出的,一旦循环退出,i就超出了范围.无论最终的printf是什么打印,它都是一个不同的i,声明的并且给出了一个未在代码中显示的值.
在其他情况下,如果从i1 开始,则测试始终为true,并且每个数字都打印出来(直到i溢出,并返回0).
最后,如果i从-1开始,测试最初通过(-1为TRUE),则发生修复后增量,将-1变为0,并打印出0.
循环再次运行,此时0未通过测试,循环结束,发生修复后增量,另一个i(代码中未显示)在循环结束后打印出来.
该for循环将不能运行- i在条件测试时,是0 之前递增.另外,除非i是在循环之前的某处定义太,代码将无法编译,因为i在printf 之后的循环是不确定的.
您到底在哪里接受此代码?编写for循环是一种非常奇怪的方式,我绝不会在混淆的编码竞赛之外使用它.
| 归档时间: |
|
| 查看次数: |
558 次 |
| 最近记录: |