int i=0,j=3; while(i<=3&&j>2) { printf("%d,%d\n",i,j); j=3-i++; } 输出的结果是0,3 1,3对吧?

如果是的话,那么 j=3-i++; 就等价于j=3-i;i++;吧?但是不是说单目运算符优先级别高于双目运算符吗,那不是应该先i++了吗?

输出的结果是你写的。

单目运算符优先级别高于双目运算符
j=3-i++; 是先计算x=i++ 再计算j=3-x

但是这里面有个关键,就是
i++是一个表达式,它的值等于没有变化前的i
++i的值等于变化后的i
比如 i = 0 那么 (i++) = 0 (++i) = 1

所以:j=3-i++; 是先计算x=i++=0 但是i已经为1了 再计算j=3-x=3
这样就出来你所写的结果了。你是理解成了i++等于i变化后的值,所以有上面的疑惑
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-04-06
使用gdb查看程序变量变化
第2个回答  2011-04-06
1 输出的结果是:
0,3
1,3
完全正确。
2 j=3-i++; 等价于j=3-i;i++;是对的。在j=3-i++; 这个语句中,i++优先于减运算,j=3-i++; 还等价于j=3-(i++);但i++表示先取i的值,再自加,因此参加减运算的是没有自加前的值。
相似回答