虽然懂了。但是平时要注意哎

来源:互联网 发布:java mvc模式 编辑:程序博客网 时间:2024/04/20 01:51
大家来分析一下以下程序的错误之处。

有程序片段:
       int A,B,C,m=1,n=0;
       A=(--m=n++)?- -m:++n;  
       B=++m;
       C=n--;
自我分析:程序第二行是个三目运算后赋值给A,首先判断条件:--m=n++成立与否?按照以前的认识,--m与m--的区别是:前者先自减再取值,后者是先取值再自减。那么条件中m自减后为0,n取值0,后减为-1,因此条件不成立,m的值为-1给A,然后,再自减为-2,程序第三行中B为-2,第四行C为0.但程序运行后结果为2  0  2.请帮助解释下,我的分析哪里错了。谢谢

 

首先说明一点 --m=n++  ?能这样写吗 知道你是想用它作为条件,但=是赋值  这里应该写成--m==n++

其次你没有弄清楚自增自减的运算法则

比如第二句 --m 此时 这个表达式的值是0   m值也是0    而 n++ 此时表达式值为0 n值自增后成了1  。

所以这里--m==n++ 是成立的 成立输出的是冒号前面的内容 而不是后面的。你刚说不成立输出前面的是错误的。

所以这里输出++n 前面n已经是1了 这里这个表达式的值是先运算 n再自增,表达式值和n值都为2 ,所以A=2


前面的弄清楚了 后面的就一样分析了