我在C语言中有以下代码片段.
int main()
{
int x = 1, y = 1;
for( ; y ; printf("%d %d ", x, y))
{
y = x++ <= 2;
}
printf("\n");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
它给出了类似的输出
2 1
3 1
4 0
Run Code Online (Sandbox Code Playgroud)
我不明白输出和含义y = x++ <= 2.
Ian*_*Ian 10
y = x++ <= 2由2部分组成:(1)x++和(2)分配y = ...
x++只是意味着后增量:你拿的价值x,然后你增加x的1.
赋值y = ...将y的值设置为1(如果x++ <= 2为true)或0(如果x++ <= 2为false)
现在棘手的部分是你的for-loop:
for( ; y ; printf("%d %d ", x, y))
Run Code Online (Sandbox Code Playgroud)
请注意,在你for-loop的printf("%d %d ", x, y)(增量条件)将被打印出来后,每个回路.
并注意终止条件;y;,这意味着只要y is 1您将保持在循环中.结合它们,你得到的结果是:
2 1 3 1 4 0
Run Code Online (Sandbox Code Playgroud)
顺序看起来像这样:
//first x = 1, y = 1
y = x++ <= 2; //x = 1 <= 2 returns 1, x++, x becomes 2, y becomes 1
printf("%d %d ", x, y)// you get your first 2 1
y = x++ <= 2; //x = 2 <= 2 returns 1, x++, x becomes 3, y becomes 1
printf("%d %d ", x, y)// you get your 3 1
y = x++ <= 2; //x = 3 <= 2 returns 0, x++, x becomes 4, y becomes 0
printf("%d %d ", x, y)// you get your 4 0
Run Code Online (Sandbox Code Playgroud)
y = x++ <= 2;
Run Code Online (Sandbox Code Playgroud)
相当于:
if (x <= 2)
y = 1;
else
y = 0;
x++;
Run Code Online (Sandbox Code Playgroud)
y = x++ <= 2;
Run Code Online (Sandbox Code Playgroud)
此表达式检查是否x<=2并将结果赋值给y并递增x.随着后增量运算符x递增但使用其原始值.
如果x<=2那么y=1否则y=0,增量x和打印x和y,直到y变成0.