本帖最后由 未来电子 于 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,
第二个结果就不明白了,会的解释一下
软件换过好几个都是这个情况。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
你根本不明白我说的
C的的表达式求值顺序是定义好的,根据运算符优先级和结合顺序计算,各个C编译器必须而且一定要符合C的标准,否则就不能算C编译器
但是你的表达式里有两处改变了同一个变量的值,就牵扯到改变什么时候应用到变量上的问题,对于C标准,并没有规定值如何应用到变量上
把你的表达式分成三部分
左边的(++j)是第一部分
中间的+是第二部分
右边的(++j)是第三部分
这三部分执行的顺序是确定无疑的第一和第三部分肯定先执行,但是第二部分执行的时候两侧的都是j,但是值可能不一样,因为C的标准呢只要求整个表达式全部求值完成后j的值是++两次的结果,并不要求在表达式执行过程中j的值也准确。
你自己google一下就明白
如果都不想学习还问什么。
请不要研究 q=(++j)+(++j);或者 q=(++j)+(++j)+(++j);这种问题。。
毫无意义,浪费生命。。。。
简而言之依赖于实现,不同的编译器就会有不同的结果。。
对于自加运算符。
只要搞清楚 : q= i++; 和 q = ++i;的区别就行了。。
--------------------------------------------------------------------------
如果一定要研究。对底层实现有兴趣的话,请自学汇编语言,看汇编代码...
我知道你的意思,但是我还是喜欢分成多条语句写.
保证自己写的代码在不同的编译器上都是正确的.
懒得看标准了.也理解你的意思.
一周热门 更多>