大家来分析一下以下程序的错误之处。
有程序片段:
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
前面的弄清楚了 后面的就一样分析了