我需要一个for循环的解释

时间:2018-04-12 05:26:42

标签: c

我在解释这段代码时遇到了问题,我真的想详细解释它是如何工作的。

#include <stdio.h>
#include <stdlib.h>

int main()
{
  int x=-3, y=0, k,j;

  for( k=j=-3 ; x= x+(k<j),++j ; y+=2);
  printf("x=%d  y=%d k=%d  j=%d",x,y,k,j);

  getch();
}

顺便说一句,答案是x=-1 y=4 k=-3 j=0。问题是我尝试过解释它,我实际上并不知道如何通过增量部分(++j)。

1 个答案:

答案 0 :(得分:2)

int x=-3, y=0, k,j;
for( k=j=-3 ; x= x+(k<j),++j ; y+=2);
int x=-3, y=0, k=-3, j=-3;
while(x = x+(k<j), ++j) {
    y += 2;
}
int x=-3, y=0, k=-3, j=-3;
x += k<j;
while(++j) {
    y += 2;
    x += k<j;
}
int x=-3, y=0, k=-3, j=-3;
x += 0;
while(++j) {
    y += 2;
    x += k<j;
}
int x=-3, y=0, k=-3, j=-3;
while(++j) {
    y += 2;
    x += k<j;
}

现在,这更容易理解:

  • 最后,j将为零,因为它是循环的退出条件;
  • 循环将运行两次,因为第三次++j被评估,它将评估为零;
  • y将以4结束,因为它从零开始,循环运行两次,每次增加2;
  • k永远不会被触及,所以它保持在-3;
  • 在循环体中始终为k<j,因为它们起始相等,但一旦控制流达到jx+=k<j已经增加,因此该语句变为++x。当它运行两次时,x变为-1。