maomingkun 发表于 2013-11-27 22:35:44

解释一下这个c++问题

本帖最后由 maomingkun 于 2013-11-27 22:47 编辑

源码如下:
#include <stdio.h>

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);
}


运算结果q的值为什么是22,而不是21呢?++j是先自增再参与运算,那q不是应该等于6+7+8=21么?为什么会是22呢?小弟很是费解啊,到底问题出在哪里了?

my_angel 发表于 2013-11-27 22:35:45

我项很多人都知道i++和++i的区别,但是在复杂的式子中却没能得到我们预料的结果,其实这都是编译器的问题。。不同的编译器在处理这些式子时会有一些不同。。。因此,不要纠结于这些问题。。。

maomingkun 发表于 2013-11-28 14:32:27

my_angel 发表于 2013-11-28 00:23 static/image/common/back.gif
我项很多人都知道i++和++i的区别,但是在复杂的式子中却没能得到我们预料的结果,其实这都是编译器的问题。 ...

那岂不是跟bug一样?

my_angel 发表于 2013-11-28 14:39:48

maomingkun 发表于 2013-11-28 14:32 static/image/common/back.gif
那岂不是跟bug一样?

所以实际使用上很少会用这种复杂的多重自增自减。。避免这种情况的发生

maomingkun 发表于 2013-11-28 14:42:38

哎被甲鱼哥给坑了:lol:

幼龙 发表于 2013-11-28 20:48:54

有的编译器会“优化”你的代码,然后自加完后再往下走,然后莫名其妙的多了1

卧室不要床 发表于 2013-11-29 01:25:29

看汇编代码吧

maomingkun 发表于 2013-11-29 16:06:17

卧室不要床 发表于 2013-11-29 01:25 static/image/common/back.gif
看汇编代码吧

还没学会汇编呢
页: [1]
查看完整版本: 解释一下这个c++问题