我在解释这段代码时遇到了问题,我真的想详细解释它是如何工作的。
#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
)。
答案 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
,因为它们起始相等,但一旦控制流达到j
,x+=k<j
已经增加,因此该语句变为++x
。当它运行两次时,x
变为-1。