我已经使用Code :: Blocks查找结果了,最后它给了我2
,其中i + j = 1 + 1
。
#include <stdio.h>
int main(void) {
int i = -1, j = 1;
for(i++; i++; i++)
j++;
printf("%d",i + j);
return 0;
}
i
如何成为1
,为什么j
没有增加?
答案 0 :(得分:6)
您从i == -1, j == 1
开始。
然后您运行第一个i++
,它将生成i == 0
。结果({{1}的原始值)未使用。
然后您在i
中进行首次测试。由于i++
已经是i
,因此测试是0
,因此false
循环将退出。现在,后增量运行,使其变为for
,然后退出循环。
请注意,如何从未达到i == 1
!
要更清楚地看到它,可以按照以下等效方式考虑j++;
循环:
for
答案 1 :(得分:3)
这是执行顺序:
i
是-1
,而j
是1
i
递增(此后i == 0
)
该循环检查是否为i != 0
。由于此时i
是0
,所以将跳过循环的内容。
i
再次递增(此后i == 1
)
代码显示i + j
,这是2
,因为j
不变,而i
是1
。
这是一个带有while
循环的程序,它与您所质疑的程序具有相同的作用:
int main(void) {
int i = -1, j = 1;
i++;
while(i++)
{
j++;
i++;
}
printf("%d",i + j);
return 0;
}
直接回答您的问题:
i
之后是1
,因为它是从-1
的原始值起增加了两次。
j
不会增加,因为跳过了循环的内容。
答案 2 :(得分:1)
让我先解释一下如何执行循环:
首先执行初始化步骤,并且仅执行一次。此步骤允许您声明和初始化任何循环控制变量。只要出现分号,就无需在此处声明。
接下来,评估条件。如果为true,则执行循环主体。如果为假,则不执行循环主体,并且控制流仅在for
循环之后跳转到下一条语句。
增量运算符: i
的值在执行后会递增i++
您的代码说明:
for(i++; i++; i++)
在初始化步骤i++
已执行,但是i
仍将是0
,直到达到条件for的循环为止。
i
变为零,表示条件为假,但同时又执行了一个i++
。
由于条件为假,for
循环语句将永远不会执行,i
的值将为1
,而j
的值仍为1