受混乱束缚,需要明确解释后增量

时间:2013-06-12 03:00:55

标签: c

伙计们我是编程的新手,我对后期增量值的结果感到惊讶,现在我发现并执行下面的代码后我会受到混乱的束缚,如果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?我迷路了...请解释一下......非常感谢你。

6 个答案:

答案 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变为1i为整个第二次迭代保留值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;
}