C - for循环代码之间的差异

时间:2015-12-04 07:50:49

标签: c for-loop

有人可以解释这两个for-loop代码之间的区别吗?

代码1:

int j = 0;
int i;
int n = 8;
for (i = 0; i < n; i++){
        printf("Value if I: %d\n",i);
    while (j < n){
        printf("Value of J: %d\n",j);
        j++;
        }
}

}

输出:

i = 0 , j = 0,1,2,3,4,5,6,7
i = 1
i = 2
i = 3
i = 4
i = 5
i = 6
i = 7

代码2:

int i;
int n = 8;
for (i = 0; i < n; i++){
        printf("Value if I: %d\n",i);
        int j = 0;
    while (j < n){
        printf("Value of J: %d\n",j);
        j++;
        }
}

}

输出:

    i = 0 , j = 0,1,2,3,4,5,6,7
    i = 1 , j = 0,1,2,3,4,5,6,7
    i = 2 , j = 0,1,2,3,4,5,6,7
    i = 3 , j = 0,1,2,3,4,5,6,7
    i = 4 , j = 0,1,2,3,4,5,6,7
    i = 5 , j = 0,1,2,3,4,5,6,7
    i = 6 , j = 0,1,2,3,4,5,6,7
    i = 7 , j = 0,1,2,3,4,5,6,7

为什么上述两个for-loop代码之间存在差异?

4 个答案:

答案 0 :(得分:3)

在第二个代码中,您每次都在while循环之前重置j,因此您可以获得i的每个循环的j的所有值。 在第一种情况下,一旦你到达j = 8,就没有更多的这个值的重置,所以每次检查while条件时它返回FALSE,它不再打印它。

答案 1 :(得分:1)

主要区别在于,每次在第二个代码中执行新的for循环时都会创建J,而不是第一个循环中的局部变量。

这意味着在第一个代码中的第一个循环之后,J将始终为8并且不再打印(因为它从第一个循环开始已经是8)

int j = 0;
int i;
int n = 8;
for (i = 0; i < n; i++){
        printf("Value if I: %d\n",i);
    while (j < n){
        printf("Value of J: %d\n",j);
        j++;
        }
  j = 0 //THIS RESETS J TO 0 SO IT WILL RUN 8 TIMES PER LOOP
}

}

上面的内容与第二段代码

的作用相同

答案 2 :(得分:0)

在第二个代码中,您在for循环的每次迭代中初始化j0。因此,每次为第二个代码运行foor循环时,while()循环都会运行8次。

为了扩展这一点,这正是发生的事情:

int i; // i declared
int n = 8; // n declared & initialised
for (i = 0; i < n; i++){ // runs 8 times, while i < 8, i starting at 0
        printf("Value if I: %d\n",i); // print
        int j = 0; // declares & intialises j 8 times (every iteration)
    while (j < n){ // runs 8 times j < 8, j starting at 0, for every iteration of the for loop
        printf("Value of J: %d\n",j); // print
        j++; // increment j
        }
}

}

答案 3 :(得分:0)

因为在第二个循环中你设置j值等于0所以当while启动时,它必须打印从0到8的所有数字。在你的第一个循环中你设置j值等于0一次这样执行命令和因为j值为8,所以在下一个循环中没有执行时,你不会在每个循环中将j = 0设置为第二个循环。