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

2025-03-26 03:10:15
推荐回答(3个)
回答1:

输出的结果是你写的。

单目运算符优先级别高于双目运算符
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变化后的值,所以有上面的疑惑

回答2:

使用gdb查看程序变量变化

回答3:

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的值,再自加,因此参加减运算的是没有自加前的值。