代码#include
Int main()
{
int a =20;
int score;
{ a = 10;
score =a + 250;
int score = 30;
printf("%d\n",score);
}
printf("%d\n",score);
return 0;
}
为何输出的两个score值不一样?我感觉第二次有一个int输入,第二个score值应该为30了,怎么会为260呢?很不理解,请大神给个解释呗,谢谢啦。
这个是变量作用域的问题,实在不能理解为什么,可以用VS单步调试,监控&score的地址,输出30和260的时候&score是不相同的,大概可以简化如下
{//我是括号君A
int score**[addr1]**;//声明周期是所有A中,直到A括号结束
...
{//我是括号君B
score**[addr1]**=a+250;
int score**[add2]**=30;//声明周期是所有B中,直到B括号结束
printf socre**[addr2]** //这个时候第一个score地址是add1的变量被隐藏,不可见
}
printf socer**[addr1]** //这个时候刚才的地址是add2的变量已经不存在了
}
哪个哥哥姐姐给说一下,谢谢啦
两个score作用域不一样,第一个只在最内层。。。
重点是这个score在函数中定义了两遍,第一次定义是一个全局变量,第二次是局部变量。
在执行a=10和score=a+250后,对于全局变量a和score的值都发生了改变。
随后又在内层括号中定义了一个score,是局部变量,只在这个括号内生效,所以第一次打印的是30.执行到这个括号结束,内部定义的score消失,
printf打印的是全局变量中的score,所以是260.
作用域不同,第一个为局部变量,所以为30大括号结束,局部变量的生命周期结束,第二次为全局变量,在括号内部定义局部变量前使用的是全部作用域的全局变量。