int main() {
int j = 0;
int i = 0;
for (j = 0; j < 5; j++) {
printf("Iteration %d : %d ", j + 1, i);
int i;
printf("%d", i);
i = 5;
printf("\n");
}
}
上面的代码生成以下输出:
Iteration 1 : 0 0
Iteration 2 : 0 5
Iteration 3 : 0 5
Iteration 4 : 0 5
Iteration 5 : 0 5
我无法理解为什么迭代2、3、4、5中的第二个
printf
值是5
我对每次迭代为什么第一个值为0的原因的理解是,
i
循环中for
的范围是局部的,并且在i
循环中声明了for
时,只要我们进入新的迭代,它就会被销毁。但是我无法弄清楚为什么第二个
printf
的值变为5。 最佳答案
您的程序的行为是不确定的。
内部作用域i
在读取时未初始化。
(可能发生的情况是,在后续迭代中重新引入的i
与内部i
的前一个化身占用相同的内存,并且第一次迭代中未初始化的内存对应于0。但是并不依赖于此。其他有时,编译器可能会吃掉你的猫。)