#include <iostream.h>
int main()
{
int b,a,c;
b=5;
a=(++b)+(++b)+(++b);
b=5;
c=(++b)+(++b)*(++b);
cout<<a<<endl;
cout<<c<<endl;
}
为什么输出a是22,c是72,按照我的思路的话,a=6+7+8=21,c=6+7*8=62;请问运行结果为什么不是21和62,而是22和72??多谢了!
-
近期文章
近期评论
- coolker 发表在《打造最快的Hash表》
- struggle 发表在《提供C语言教学课件(适用于初学者)》
- zhanghaibo 发表在《提供C语言教学课件(适用于初学者)》
- zhanghaibo 发表在《提供C语言教学课件(适用于初学者)》
- diys 发表在《C语言编程宝典(王大刚) 1.1 C 语言的产生与发展》
文章归档
- 2022 年十月
- 2014 年一月
- 2013 年十二月
- 2012 年十一月
- 2012 年七月
- 2012 年六月
- 2012 年五月
- 2012 年四月
- 2012 年三月
- 2012 年二月
- 2011 年十二月
- 2011 年十月
- 2011 年九月
- 2011 年八月
- 2011 年七月
- 2011 年六月
- 2011 年五月
- 2011 年四月
- 2011 年三月
- 2011 年二月
- 2011 年一月
- 2010 年十二月
- 2010 年十一月
- 2010 年十月
- 2010 年九月
- 2010 年八月
- 2010 年七月
- 2010 年六月
- 2010 年五月
- 2010 年四月
- 2010 年三月
- 2010 年二月
- 2010 年一月
- 2009 年十二月
- 2009 年十一月
- 2009 年十月
- 2009 年九月
- 2009 年八月
- 2009 年七月
- 2009 年六月
- 2009 年五月
- 2009 年四月
- 2009 年三月
- 2009 年二月
- 2009 年一月
- 2008 年十二月
- 2008 年十一月
- 2008 年十月
- 2008 年九月
- 2008 年八月
- 2008 年七月
- 2008 年六月
- 2008 年五月
- 2008 年四月
- 2008 年三月
- 2008 年二月
- 2008 年一月
- 2007 年十二月
- 2007 年十一月
- 2007 年十月
- 2007 年九月
- 2007 年八月
- 2007 年七月
- 2007 年六月
- 2007 年三月
- 2007 年二月
- 2007 年一月
- 2006 年十二月
- 2006 年十一月
- 2006 年十月
- 2006 年九月
- 2006 年八月
- 2006 年七月
- 2006 年六月
- 2006 年五月
- 2006 年四月
- 2006 年三月
- 2006 年二月
- 2006 年一月
- 2005 年十二月
- 2005 年十一月
分类目录
功能
我用WIN-T
CODE:
#include <stdio.h>
int main()
{
int b,a,c;
b=5;
a=(++b)+(++b)+(++b);
b=5;
c=(++b)+(++b)*(++b);
printf(“a=%d\nc=%d”,a,c);
getch();
}
A是24,C是72啊!!
怪!!有人解答吗?我也想知!!
各种不同的编译器可能在自加中引起不同的结果,现在来详细说说过程,让我们一步步看看(++b)+(++b)+(++b)是如何处理的。
i=3;
当处理先进行(++b)+处理,发现++b等级高,于是处理++b。特殊的情况发生了,这时++b的是对i本身相加,其结果并没有被压入堆栈。堆栈中仍为空,但i值却被更改为6。计算机继续处理b+(++b)。++的等级还是比+高。于是再度处理++。i的值再次被加了一。成了b+b+。因为++取地址运算的特殊性,令到这里的两个i的值都为7。同时堆栈还是没有数据。继续处理b+b+,两个优先级相同的运算符。b+b被执行,结果为14,结果被压入堆栈st,成了st+(++b)。再执行是是执行++,b被加一成了8。于是为st+b。最后从堆栈中取出st==14和i==8相加。最后结果为22。
这就是为什么(++b)+(++b)+(++b)会等于22了。
上面有个字母搞错了,
应该是b的有个地方写成了i,汗……………………