递减运算符如何在while语句中工作?

Dog*_*Dog 6 c while-loop decrement

我在C中有以下代码源:

#include<stdio.h>

void main()
{
    int i=0, x=3;
    while((x---1))
    {
        i++;
    }
    printf("%d", i);
}
Run Code Online (Sandbox Code Playgroud)

这个while语句是如何工作的,为什么它打印2而不是1?

小智 10

因为x---1实际上只是在减少之前x-- - 1产生了价值.x - 1x

假设x初始值为3,则循环运行2次(一次x = 3,一次x = 2,然后下一次x为1,所以x - 1为0,循环不再运行).

所以,i从0开始,它增加两次,所以它最终为2.


Gri*_*han 5

(x---1) == (x-- -1)

因为编译器首先尝试选择更大的令牌,所以---解释为--&-

表达x-- - 1是指第一1 减去从当前值x到由于-减去操作.然后 ,由于postfix减量运算符,x 1 --.

例如,在第一次迭代之前x = 3,因此虽然条件是2(即3 - 1)在x递减之后,并且在下一次迭代之前x = 2.

x = 3,i =0;

  • 1次迭代: while(2)和循环i变为 1

x = 2, i = 1;

  • 2次迭代: while(1)和循环i变为 2

x = 1, i = 2;

  • 现在,x - 1= 0给出 while(0)和循环中断而i不是递增.

所以循环输出后i: 2

再注意一点: i不会因为循环中断而增加,因为i++在while-block中{},但是x减少为0.循环后,如果你printf x然后输出将是0.