楼主这是我第一次给人解说程序,水平有限错了就当我瞎掰!我亲自试了一下此程序没有任何问题,输出的结果为1和-2.
int x=3;
do{
printf("%d\n",x-=2);
x-=2等价于x=x-2,因为x已经被定义为3,代进表达式x-=2中去,之后x变成了1。这时程序会自动输出1的。
}while(!(--x));
!(--x)这个是while这个循环的条件表达,其中的--x表示x=x-1,把由上面的程序x已经变成的1带入其中,得到--x表达式的值为0,整个!(--x)也就变成了!(0),其中0表示假,!(0)表示非假,就是表示真。所以while的表达式!(--x)为真,所以跳到do处继续执行。这时x=0,经过x-=2后,x=-2,这时程序自动输出-2,再把x=-2代入(!(--x))表达式中,--x等价于x=x-1,--x表达式的值为-3,其中-3表示真,!(-3)就表示假了。所以!(--x)这个表达式为假,因此循环结束不会往下执行,最后程序输出1和-2.
[ 本帖最后由 代码书生 于 2014-1-19 23:55 编辑 ]
int x=3;
do{
printf("%d\n",x-=2);
x-=2等价于x=x-2,因为x已经被定义为3,代进表达式x-=2中去,之后x变成了1。这时程序会自动输出1的。
}while(!(--x));
!(--x)这个是while这个循环的条件表达,其中的--x表示x=x-1,把由上面的程序x已经变成的1带入其中,得到--x表达式的值为0,整个!(--x)也就变成了!(0),其中0表示假,!(0)表示非假,就是表示真。所以while的表达式!(--x)为真,所以跳到do处继续执行。这时x=0,经过x-=2后,x=-2,这时程序自动输出-2,再把x=-2代入(!(--x))表达式中,--x等价于x=x-1,--x表达式的值为-3,其中-3表示真,!(-3)就表示假了。所以!(--x)这个表达式为假,因此循环结束不会往下执行,最后程序输出1和-2.
[ 本帖最后由 代码书生 于 2014-1-19 23:55 编辑 ]