在for循环中声明变量

kar*_*abi 2 c loops for-loop declaration

我正在尝试以下C代码:

void main()
{
   int i;
   for(i = 0; i< 10; i++)
   { 
      int num;
      printf("\nthe variable address is: %p", &num);

   }
   getch();
}
Run Code Online (Sandbox Code Playgroud)

我原以为它要么抛出错误要么num多次声明,而是&num对于for循环的所有迭代,输出显示相同的值.这种行为背后的原因是什么?似乎无论在for循环中都有声明,实际的声明/定义只发生一次.

有人能帮我理解这种行为吗?

Luc*_*ore 7

您正在打印堆栈分配变量的地址.变量的范围是for循环.从理论上讲,该变量是在该行创建的int num;,其内存在关闭时释放.内存布局严格依赖于编译器.

可能是您的编译器足够聪明,知道它可以重用该内存,或者可能是内存是空闲的,并且由编译器为您的变量存储选择.

它也可能是优化器告诉编译器可以重用num.

然而,这完全取决于编译器,因为它具有相同的地址并不意味着它只被声明/定义一次.