990 发表于 2014-7-6 00:23:01

求助,C语言小白求助

#include <stdio.h>
void main()
{
int i=3,k;
k=(++i)+(++i)+(++i);
printf("%d\n",k);
}

小白问题, 大神见笑了
为何上面的代码 结果等于 16 而不是 15?求解法

牡丹花下死做鬼 发表于 2014-7-6 09:14:00

论坛搜索自增 一大堆

Angel丶L 发表于 2014-7-6 10:49:24

编译器的问题哦

Mikel 发表于 2014-7-6 13:22:00

现在有点讨厌看到这种问题了

jidun121 发表于 2014-7-6 13:42:12

两包烟的钱,把不了妹买不了田,不如拿来支持小甲鱼推出更多原创教学视频!

FrKylin 发表于 2014-7-6 16:04:09

楼主,咱们同是菜鸟,互相帮助。

          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

零少 发表于 2014-7-7 00:32:42

这种自增根据编译器的不同结果不同。
页: [1]
查看完整版本: 求助,C语言小白求助