c语言++运算符的详细执行步骤,运算的和书籍的结果不一...

2020-01-30 13:59发布

本帖最后由 未来电子 于 2013-3-26 19:32 编辑

        int p,q,i,j;
        i=j=3;
        q=0;
        q=++j
        printf("%d,",q);
这时候的运算的值是4,
          int p,q,i,j;
        i=j=3;
        q=0;
        q=(++j)+(++j);
        printf("%d,",q);
这时候的运算的值是10,
          int p,q,i,j;
        i=j=3;
        q=0;
        q=(++j)+(++j)+(++j);
        printf("%d,",q);
这时候的运算的值是16,
第二个结果就不明白了,会的解释一下
软件换过好几个都是这个情况。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
19条回答
whyjld
2020-01-31 17:53
laujc 发表于 2013-3-26 09:29
是的,以前好像看到过类似的讨论,如果是(j++)+(++j)就更有迷惑性,C语言标准没有要求先执行中间的一个+号左 ...

你根本不明白我说的
C的的表达式求值顺序是定义好的,根据运算符优先级和结合顺序计算,各个C编译器必须而且一定要符合C的标准,否则就不能算C编译器
但是你的表达式里有两处改变了同一个变量的值,就牵扯到改变什么时候应用到变量上的问题,对于C标准,并没有规定值如何应用到变量上
把你的表达式分成三部分
左边的(++j)是第一部分
中间的+是第二部分
右边的(++j)是第三部分
这三部分执行的顺序是确定无疑的第一和第三部分肯定先执行,但是第二部分执行的时候两侧的都是j,但是值可能不一样,因为C的标准呢只要求整个表达式全部求值完成后j的值是++两次的结果,并不要求在表达式执行过程中j的值也准确。
你自己google一下就明白
如果都不想学习还问什么。

一周热门 更多>