- 注册时间
- 2006-3-28
- 最后登录
- 2008-6-4
⑧专业
絕望青年,一起增高吧
- 积分
- 13676
|
发表于 2007-8-14 12:42:31
|
显示全部楼层
{
int a=10;//outter A
int b=20;
//1
printf("%d\\n",a);
printf("%d\\n",b);
{
int a=30; //inner A
//2
printf("%d\\n",a);
printf("%d\\n",b);
}
//3
printf("%d\\n",a);
printf("%d\\n",b);
}
結果是
10 20 30 20 10 20
但為啥會這樣呢?
C編譯器會首先找變數所在的scope,找不到的話便會往上一層找
比如在//1中
在同一層中a,b也是存在的,而a是指值為10的a (//outter A),b為20
在//2中,a出現在該scope之內,所以編譯器不會再向上層找,a便指值為30的a(//inner A)
但是b沒有出現在該scope之內,編譯器便向上一層scope找,便找到b曾經被定義,所以這兒的b的值為20
在//3中,運行過程離開了(//inner A)的Scope,也代表(//inner A)已死
所以//3指的a是指(//outter A) |
|