在c中声明同一个变量两次

Dee*_*pak 1 c scope initialization declaration undefined-behavior

我只是在玩 for 循环并写了下面的代码。当我编写第二个 printf 语句时,编译器要求我再次声明 c 变量,当我再次声明它时,我运行代码并
得到 c + 4 的答案为 20。for 循环工作正常。为什么 c + 4 表达式产生输出 20?

#include<stdio.h>

int main()
{
  for(int c =1; c <= 10; ++c)
  {
    printf("%d\n",c);
  }
    
  int c;
  printf("%d ",c+4);
    
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

dbu*_*ush 6

两者都有两个名为 的独立变量c,每个变量驻留在不同的范围内。

c循环中声明的范围forfor语句本身及其主体。这会隐藏c在函数范围内声明的内容main,或者如果后者是在循环之前声明的,则会隐藏该声明。

此外,c在 范围内声明的值main未初始化,并且您尝试读取其值。未初始化变量的值是不确定的,并且当相关变量尚未获取其地址时读取这样的值会触发未定义的行为

至于为什么你得到的值是 20,这是未定义行为的一部分。无法保证您会获得任何特定值,甚至无法保证您会两次读取相同的值。