y = x++ <= 2 由两部分组成:(1) x++ 和 (2) 赋值 y = ...
x++ 仅表示后增量:您获取x 的值,然后将x 增加1。
assignment y = ... 会将 y 的值设置为 1(如果 x++ <= 2 为真)或 0(如果 x++ <= 2 为假)
现在棘手的部分是你的for-loop:
for( ; y ; printf("%d %d ", x, y))
请注意,在您的for-loop 中,printf("%d %d ", x, y)(增量条件)将在每个循环之后打印。
并注意终止条件;y;,这意味着只要您的y is 1,您将保持在循环中。将它们结合起来,您会得到结果:
2 1 3 1 4 0
依次看起来像这样:
//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