这个相同变量名的外部变量和局部变量为什么会有这个“覆盖”,两者不是有作用域交叉吗,不是重复定义吗
举例:大括号可以是函数,也可以是语句组合
int a=1;
void main() { int a=2;
if ( a==2 ) { int a=3;
{ int a=4;
}
}
}
以上定义了不同作用域中的重名变量,等于1的那个变量a的作用域是全局,称为全局变量,在程序中没有局部定义变量a的情况下就是访问这个变量
等于2的变量作用域为main函数范围,是编译程序定义另一个变量,意思是在main函数中凡是遇到变量a的情况下,不会去访问全局变量a,而只会访问这个等于2的变量
在条件语句中的a也差不多,条件满足时程序中用到的a一定是等于3的这个变量
同理等于4的这个a,出了反大括号即失去作用,变量被放弃
在读程序时仅关心最内层的作用域范围,出了范围就失效,并且虽然变量重名,但编译程序会开始不同的独立变量给你使用,相互不会干扰,在实际运用中遇到的比如:每个作用域都用变量i做循环变量而不会相互干扰。
在同一作用域下不可以定义重名变量。