解释一下这个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呢?小弟很是费解啊,到底问题出在哪里了?
我项很多人都知道i++和++i的区别,但是在复杂的式子中却没能得到我们预料的结果,其实这都是编译器的问题。。不同的编译器在处理这些式子时会有一些不同。。。因此,不要纠结于这些问题。。。 my_angel 发表于 2013-11-28 00:23 static/image/common/back.gif
我项很多人都知道i++和++i的区别,但是在复杂的式子中却没能得到我们预料的结果,其实这都是编译器的问题。 ...
那岂不是跟bug一样? maomingkun 发表于 2013-11-28 14:32 static/image/common/back.gif
那岂不是跟bug一样?
所以实际使用上很少会用这种复杂的多重自增自减。。避免这种情况的发生 哎被甲鱼哥给坑了:lol: 有的编译器会“优化”你的代码,然后自加完后再往下走,然后莫名其妙的多了1 看汇编代码吧 卧室不要床 发表于 2013-11-29 01:25 static/image/common/back.gif
看汇编代码吧
还没学会汇编呢
页:
[1]