本帖最后由 未来电子 于 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一下就明白
如果都不想学习还问什么。
一周热门 更多>