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.
(x---1) == (x-- -1)
因为编译器首先尝试选择更大的令牌,所以---解释为--&-
表达x-- - 1是指第一1 减去从当前值x到由于-减去操作.然后 ,由于postfix减量运算符,x值减 1 --.
例如,在第一次迭代之前x = 3,因此虽然条件是2(即3 - 1)在x递减之后,并且在下一次迭代之前x = 2.
x = 3,i =0;
while(2)和循环i变为 1 x = 2, i = 1;
while(1)和循环i变为 2x = 1, i = 2;
x - 1= 0给出 while(0)和循环中断而i不是递增. 所以循环输出后i: 2
再注意一点: i不会因为循环中断而增加,因为i++在while-block中{},但是x减少为0.循环后,如果你printf x然后输出将是0.