伙计们我是编程的新手,我对后期增量值的结果感到惊讶,现在我发现并执行下面的代码后我会受到混乱的束缚,如果for循环说的话 初始化 2.如果错误终止,检查条件 3.增量。 i ++在哪里发生?我的值在哪里等于1?
int main()
{
int i, j;
for (int i =0; i<1; i++)
{
printf("Value of 'i' in inner loo[ is %d \n", i);
j=i;
printf("Value of 'i' in outter loop is %d \n", j);
// the value of j=i is equals to 0, why variable i didn't increment here?
}
//note if i increments after the statement inside for loop runs, then why j=i is equals to 4226400? isn't spose to be 1 already? bcause the inside statements were done, then the incrementation process? where does i increments and become equals 1?
//if we have j=; and print j here
//j=i; //the ouput of j in console is 4226400
//when does i++ executes? or when does it becomes to i=1?
return 0;
}
如果Post增量使用该值并添加1?我迷路了...请解释一下......非常感谢你。
答案 0 :(得分:2)
我不确定你在问什么,但有时初学者更容易理解是否重写为while循环:
int i = 0;
while (i < 1)
{
...
i++; // equivalent to "i = i + 1", in this case.
}
答案 1 :(得分:1)
你的循环声明了新变量i
,它会隐藏i
中先前声明的main()
。因此,如果在循环之外将i
分配给j
,则会调用未定义的行为,因为i
未在该上下文中初始化。
答案 2 :(得分:1)
在第一次迭代之前,i
初始化为0
。这就是你所谓的“初始化”阶段。
然后评估循环条件。循环继续为真值。
然后执行循环体。如果有continue;
语句,那将导致执行跳转到循环的末尾,就在}
之前。
然后评估增量运算符的副作用。
因此,在第一次迭代之后,i
变为1
。 i
为整个第二次迭代保留值1
。
答案 3 :(得分:1)
看起来你有一个变量名冲突:i
在循环之前声明,也在循环中声明。
在i
语句中声明的for
是唯一一个永远为1的语句。它将在循环体执行后立即生成。
尝试设置一个断点并使用调试器逐步完成循环,同时观察变量的值(这是stepping with the debugger所指的视频。)
要消除使用两个名为i
的变量的意图,您可以将for循环更改为:
for (i = 0; i < 1; i++) // remove the `int`
这将确保您的代码中只有一个i
。
答案 4 :(得分:1)
评论@ CarlNorum的答案,这个评论看起来不太好:
C标准定义
for ( A; B; C ) STATEMENT
与
几乎相同{
A;
while (B) {
STATEMENT
C;
}
}
(其中包含任意数量语句的{}
块本身就是一种语句)。但是continue;
循环中的for
语句将跳到下一个语句C;
之前,而不是下一个表达式B
的测试。
答案 5 :(得分:0)
for (i=0; i<x; i++)
相当于
i=0;
while(i<x) {
// body
i = i + 1;
}