让我们一步一步来。例如拿代码:
int overalCount = 0;
for(int i = 0;i<=3;i++){
int localCount = 0;
localCount ++;
overalCount ++;
printf("%d
",i);
printf("%d
",localCount);
printf("%d
",overalCount);
}
首先将循环前的总计数初始化为 0;
然后在开始循环时初始化 int i = 0;所以我在这里是0。其他条件现在无关紧要。
而你在循环中。您在循环内初始化 count = 0。在 {} 括号之间。这很重要。
现在增加两个计数(我不会增加 i,因为它是在循环中增加的。你可以这样做,但它会弄乱我的例子)
你的总计数和局部计数都是 1。 i 仍然是 0;
现在让我们进行第二次迭代。代码再次跳回声明。 i 已经被声明了,所以在那里没什么可做的,它不会被再次初始化。检查下一个条件,i 为 0,因此 i<=3 =true,我们可以更进一步。现在它将增加 i(您可以添加 i-- 也可以减少或 i = i+1000)
让我们回到循环体。您将再次初始化 localCount。旧的被遗忘,因为你以前离开过身体。所以 localCount 在这里又是 0,在下一行你将它增加到 1。
另一方面,overalCount 是在循环之前声明的,所以它仍然存在,所以你可以在这里将它从 1 增加到 2。
您将进行此循环,直到您的 i 不等于 4,因此您的条件 i<=3 失败并且您将离开循环。离开循环后,localCount 和 i 将被遗忘。
附言您可以提前声明 i 并初始化循环
int i = 0;
for(i; i<=3; i++) {
/* whatever */
}
你的 i 不会在循环后被遗忘