我是过路的 发表于 2013-11-10 16:02:40

新手求助++,--的问题 求帮忙

#include <stdio.h>

void main ()

{
        int i=5,j=5,p,q;
        p=(i++)+(i++)+(i++);
        q=(++j)+(++j)+(++j);
        printf("%d,%d,%d,%d\n",p,q,i,j);
}
他这个答案是怎么算的???p=15,我明白了   可是Q为什么=22呢?

乱闯 发表于 2013-11-10 16:02:41

{:1_1:}论坛有过这样的问题关于i++问题?
这是之前一小伙伴问的
http://bbs.fishc.com/thread-40050-1-1.html

565123 发表于 2013-11-10 19:32:55

http://bbs.fishc.com/forum.php?mod=viewthread&tid=32410

friendan 发表于 2013-11-10 20:22:49

本帖最后由 friendan 于 2013-11-10 20:27 编辑

无论是++还是--,同一个变量在一行代码中最好不要超过一次进行连续的++或--,
否则结果难以预料,听说这跟编译器有关,如何改进,我会给一个例子你参考。
你不明白q为什么等于22,我从汇编的角度讲给你听吧,具体请看下面的汇编代码,
我的编译器是VC6的,其它的编译器结果可能不同,请铭记忠告:
无论是++还是--,同一个变量在一行代码中最好不要超过一次进行连续的++或--
从汇编的角度看,不难发现,程序先算前面两个(++j)+(++j),所算结果为14,
然后程序再算最后一个(++j),所算结果为8
最后14+8=22
15:         q=(++j)+(++j)+(++j);//汇编代码如下
0040104F 8B 45 FC             mov         eax,dword ptr //从内存取j的值放到eax中
00401052 83 C0 01             add         eax,1 //j=j+1
00401055 89 45 FC             mov         dword ptr ,eax //将j的值放回内存,此时j为6
00401058 8B 4D FC             mov         ecx,dword ptr //从内存取j的值放到ecx中
0040105B 83 C1 01             add         ecx,1//j=j+1
0040105E 89 4D FC             mov         dword ptr ,ecx //将j的值放回内存,此时j为7
00401061 8B 55 FC             mov         edx,dword ptr //从内存取j的值放到edx中
00401064 03 55 FC             add         edx,dword ptr //edx=edx+7=7+7=14
00401067 8B 45 FC             mov         eax,dword ptr //从内存取j的值放到eax中
0040106A 83 C0 01             add         eax,1//j=j+1
0040106D 89 45 FC             mov         dword ptr ,eax //将j的值放回内存,此时j为8
00401070 03 55 FC             add         edx,dword ptr //edx=edx+j=14+8=22
00401073 89 55 F8             mov         dword ptr ,edx //将计算结果赋给q,即q=22

如果你想获得预期的结果,请将程序修改如下:#include <stdio.h>
void main ()

{
      int i=5,j=5,p,q;
      p=(i++)+(i++)+(i++);
      q=(++j);
      q=q+(++j);
      q=q+(++j);
      printf("%d,%d,%d,%d\n",p,q,i,j);
}
效果截图:


再次忠告:
无论是++还是--,同一个变量在一行代码中最好不要超过一次进行连续的++或--

否则编译器不同,结果难以预料。




用双手成就梦想 发表于 2013-11-10 20:24:20

我觉得没有必要纠结这个,因为不同的编程器和不同的平台结果不一样,还有实际编程中不会这样写的。

乱闯 发表于 2013-11-11 17:16:56

{:1_1:}加油 楼主

tjf 发表于 2013-11-11 20:05:16

还有这种事,长见识了!
页: [1]
查看完整版本: 新手求助++,--的问题 求帮忙