求助,C语言小白求助
#include <stdio.h>void main()
{
int i=3,k;
k=(++i)+(++i)+(++i);
printf("%d\n",k);
}
小白问题, 大神见笑了
为何上面的代码 结果等于 16 而不是 15?求解法
论坛搜索自增 一大堆 编译器的问题哦 现在有点讨厌看到这种问题了 两包烟的钱,把不了妹买不了田,不如拿来支持小甲鱼推出更多原创教学视频! 楼主,咱们同是菜鸟,互相帮助。
k=(++i)+(++i)+(++i);
0040D7BF mov eax,dword ptr
0040D7C2 add eax,1
0040D7C5 mov dword ptr ,eax
0040D7C8 mov ecx,dword ptr
0040D7CB add ecx,1
0040D7CE mov dword ptr ,ecx
0040D7D1 mov edx,dword ptr
0040D7D4 add edx,dword ptr
0040D7D7 mov eax,dword ptr
0040D7DA add eax,1
0040D7DD mov dword ptr ,eax
0040D7E0 add edx,dword ptr
0040D7E3 mov dword ptr ,edx
如果汇编没学过,就看下边:
从右往左分析:
先计算最右边的++i,此时i = 4;
然后计算中间的++i,此时i = 5;
然后计算(++i)+(++i),就是后边两个++i相加赋值给i,此时i = 10
最后计算++i(此时i = 6) 然后加上上一步的结果,得到16 这种自增根据编译器的不同结果不同。
页:
[1]