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。但是并不依赖于此。其他有时,编译器可能会吃掉你的猫。)

10-08 11:00