首页 > 用户发贴区 > 编程问题提问区 > 自增运算的问题,请教!!!
2007
12-01

自增运算的问题,请教!!!

#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??多谢了!


自增运算的问题,请教!!!》有 3 条评论

  1. wfnh 说:

    我用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啊!!

    怪!!有人解答吗?我也想知!!

  2. whfhukai1221321 说:

    各种不同的编译器可能在自加中引起不同的结果,现在来详细说说过程,让我们一步步看看(++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了。

  3. whfhukai1221321 说:

    上面有个字母搞错了,应该是b的有个地方写成了i,汗……………………

留下一个回复