首页 > 用户发贴区 > 编程问题提问区 > 大家看下这是怎么回事
2008
10-13

大家看下这是怎么回事

int j=2,m;


m=(j++)+(++j)+(j++);


m为什么运行出来为啥等于9


大家看下这是怎么回事》有 12 条评论

  1. s9y9r9 说:

    我说说吧:第一个括号计算的结果是2,但之后j变成3了;

                   第二个括号,已经变成3的j又自加变成4,计算结果就是4;

                  第三个括号计算结果是原来的4,但之后j变成5了;

              三个括号里的值相加2+4+4=10

    但…..

     

  2. s9y9r9 说:

    #include<stdio.h>
    void main(void)
    {
      int j=2,m;
      m=(j++)+(j++)+(j++);
      printf(“%d\n”,m);
    }

    的结果是6    真是奇怪了!

  3. s9y9r9 说:

    #include<stdio.h>
    void main(void)
    {
      int j=2,m,n,q,s;
      m=(j++);
      n=(++j);
      q=(j++);
      s=m+n+q;
      printf(“%d\n”,s);
    }

    的结果是10啊!!!

    我很是郁闷!!继续研究!

  4. s9y9r9 说:

    想来想去终于想出来了:(j++)+(++j)+(j++);是一句,()的优先级大于+,三个括号会同时计算,都是从j=3开始,每个括号作为单独的一个算术表达式进行计算的。我们所谓的自加只会在下一句中起作用。这样3+3+3=9啦!!!

  5. Perfect 说:

    #include<iostream>
    using namespace std;
    int main(){
    int i=2,j=2,m,n;
    n = (i++)+(i++)+(i++);//语句5
    cout<<n<<endl;
    /*
    *在整个”语句5″执行后,
    *才进行3个自加运算(后自加)
    *说明后自加是在整条语句结束后
    *进行自加。
    */
    m=(++j)+(j++)+(j++);
    /*
    *加法运算顺序是从左向右执行的
    *首先执行左边的加号 (++j)+(j++),在执行第一个加号前执行(++j)此时j=3
    *左边加号执行完结果是 6,在执行第二个加号后结果为9
    */
    cout<<m<<endl;
    getchar();
    return 0;
    }
    以上说明 :
    前自加是在该变量在运算之前进行的
    后自加是在该变量所在的语句执行后进行的
     

  6. Perfect 说:

    [QUOTE=s9y9r9]想来想去终于想出来了:(j++)+(++j)+(j++);是一句,()的优先级大于+,三个括号会同时计算,都是从j=3开始,每个括号作为单独的一个算术表达式进行计算的。我们所谓的自加只会在下一句中起作用。这样3+3+3=9啦!!![/QUOTE]

     

    (j++)+(j++)+(++j)=?

  7. s9y9r9 说:

    (j++)+(j++)+(++j)=3+3+3=9

  8. Perfect 说:

    [QUOTE=s9y9r9]

    (j++)+(j++)+(++j)=3+3+3=9

    [/QUOTE]

    哦  

     我用的编译器是gcc打印出来的结果是(j++)+(j++)+(++j)=7

  9. 星情飞飞 说:

    [QUOTE=s9y9r9]

    #include<stdio.h>
    void main(void)
    {
      int j=2,m;
      m=(j++)+(j++)+(j++);
      printf(“%d\n”,m);
    }

    的结果是6    真是奇怪了!

     

    你把语句看错了

    中间那个是(++j)

    [/QUOTE]

  10. Perfect 说:

    [QUOTE=星情飞飞][QUOTE=s9y9r9]

    #include<stdio.h>
    void main(void)
    {
      int j=2,m;
      m=(j++)+(j++)+(j++);
      printf(“%d\n”,m);
    }

    的结果是6    真是奇怪了!

     

    你把语句看错了

    中间那个是(++j)

    [/QUOTE] [/QUOTE]

    m=(j++)+(j++)+(j++);

    m=6没有错

    前自加就是  在用到变量时先加后用

    后自加就是 在执行整个语句后再加

  11. 星情飞飞 说:

    你说的对

  12. 星情飞飞 说:

    [QUOTE=s9y9r9]想来想去终于想出来了:(j++)+(++j)+(j++);是一句,()的优先级大于+,三个括号会同时计算,都是从j=3开始,每个括号作为单独的一个算术表达式进行计算的。我们所谓的自加只会在下一句中起作用。这样3+3+3=9啦!!![/QUOTE]

    谢谢哈

留下一个回复