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,
第二个结果就不明白了,会的解释一下
软件换过好几个都是这个情况。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
18条回答
dr2001
1楼-- · 2020-01-31 08:17
 精彩回答 2  元偷偷看……
wxty
2楼-- · 2020-01-31 12:47
谭浩强也说过,这玩意儿跟编译器有关,看到这里,我就不想深究了,感觉实际意义不大。。
whyjld
3楼-- · 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一下就明白
如果都不想学习还问什么。
Alimy
4楼-- · 2020-01-31 23:43
本帖最后由 Alimy 于 2013-3-26 14:01 编辑

请不要研究   q=(++j)+(++j);或者  q=(++j)+(++j)+(++j);这种问题。。
毫无意义,浪费生命。。。。
简而言之依赖于实现,不同的编译器就会有不同的结果。。
对于自加运算符。
只要搞清楚 :  q= i++; 和 q = ++i;的区别就行了。。
--------------------------------------------------------------------------
如果一定要研究。对底层实现有兴趣的话,请自学汇编语言,看汇编代码...
laujc
5楼-- · 2020-02-01 02:39
whyjld 发表于 2013-3-26 13:21
你根本不明白我说的
C的的表达式求值顺序是定义好的,根据运算符优先级和结合顺序计算,各个C编译器必须 ...

我知道你的意思,但是我还是喜欢分成多条语句写.
保证自己写的代码在不同的编译器上都是正确的.

懒得看标准了.也理解你的意思.
x11223y
6楼-- · 2020-02-01 05:21
 精彩回答 2  元偷偷看……

一周热门 更多>