有两行代码:
int a=2;
int b=a+3*a++;
输出结果为8,按书上的理解优先级的高低依次为:++ * +
推算出来的话b应该为9(因为a++以后,a的值为3了),a为3,为什么打出来是b=8,可不可以麻烦解解一下,谢谢...

解决方案 »

  1.   

    1, a++
    Use a's value then increase a's value.2, ++a
    Increase a's value then use the new value.int a = 2;
    int b = a + 3 * a++;-----------------------------
    int b = 2 + 3 * 2; a++;
    ==> b = 8; a = 3;
      

  2.   

    i++ 
    先取后加int a=2;
    int b=a+3*a++;
    等同于
    int a=2;
    int b=a+3*a;
    a=a+1;
      

  3.   

    我知道i++和++i的区别
    i++ 先把i参与运算,然后再加1
    ++i 先把i的值加1,然后再参与运行.int b=a+3*a++,后面的a加1是不是要等所有的都运算完之后再加1?
      

  4.   

    对了。想清楚Evaluation和Application的区别就行了。
      

  5.   

    不知道 你学过“栈”这种数据结构吗?其实数据的运算就是通过栈来实现的。
    看看你的问题int b=a+3*a++;  
    首先先将a进栈 即是2进栈 再加号进栈 ,依次都进栈后,
    a再出栈,*出栈,3出栈,做a*3的运算 得6 。后6进栈。 a自加,但是并不能影响栈里a的值啊
    栈里的a还是2。 再6,+,2 都出栈。做6+2 得8 即是结果了。
    你可以按照这个思想自己算算 int b=3*a++ + a;
    结果就是9。因为 第二个a的值还没有进栈时 第一个a++ 就已经将a变为3了。