内层代码块定义了一个与外层代码块名字相同的变量,执行时的变量覆盖小疑惑


C语言中,内层代码块定义了一个与外层代码块名字相同的变量,执行时,内层变量覆盖了外层变量,当内层代码块执行完后,外层代码块定义的那个变量恢复使用。。。。。

疑惑 :定义变量的时候虽然名字相同,但是所处的代码块不同,内层代码块定义的变量应该是存储在不同内存位置的一个独立变量,既然内存位置都不一样,即存储变量的地址不一样,那么在程序执行的时候,内层 覆盖 外层变量是否太过于牵强,还是我的理解不对,其中奥妙何在?

例如


 int main()
{
    int a=10;
    printf("%d\n",a);
    {//新的代码块
        int a=30;
        printf("%d\n",a);
    }
    printf("%d\n",a);

}

c

Co`Ag 9 years, 2 months ago

编译器作怪
两个变量处于不同地址固然没错,然而根据语法规则,编译器认为: 在代码块内,a应指向第二个,而出了代码块,a应该复原,于是在编译时便动了手脚

我擦嘞闹的住菇 answered 9 years, 2 months ago

Your Answer