C语言中,内层代码块定义了一个与外层代码块名字相同的变量,执行时,内层变量覆盖了外层变量,当内层代码块执行完后,外层代码块定义的那个变量恢复使用。。。。。
疑惑:定义变量的时候虽然名字相同,但是所处的代码块不同,内层代码块定义的变量应该是存储在不同内存位置的一个独立变量,既然内存位置都不一样,即存储变量的地址不一样,那么在程序执行的时候,内层覆盖外层变量是否太过于牵强,还是我的理解不对,其中奥妙何在?
例如
int main()
{
int a=10;
printf("%d\n",a);
{//新的代码块
int a=30;
printf("%d\n",a);
}
printf("%d\n",a);
}
编译器作怪
两个变量处于不同地址固然没错,然而根据语法规则,编译器认为: 在代码块内,a应指向第二个,而出了代码块,a应该复原,于是在编译时便动了手脚