黑马程序员技术交流社区
标题:
【作用域的问题】请问这些打印结果
[打印本页]
作者:
neobug
时间:
2015-7-21 23:27
标题:
【作用域的问题】请问这些打印结果
#include <stdio.h>
int main(int argc, const char * argv[]) {
int a = 20;
int score = a+100;
printf("%d\n",score);
{
score = a + 250;
int score = 30;
printf("%d\n",score);
}
printf("%d\n",score);
return 0;
}
复制代码
作者:
neobug
时间:
2015-7-21 23:28
结果是 120 30 270
最后一个270是怎么得来的啊? 作用域有点没搞清楚啊
作者:
neobug
时间:
2015-7-21 23:29
完整代码其实是这样
int main(int argc, const char * argv[]) {
int a = 20;
int score = a+100;
printf("%d\n",score);
{
int score = 50;
{
score = 10;
printf("%d\n",score);
}
a = 10;
}
{
score = a + 250;
int score = 30;
printf("%d\n",score);
}
printf("%d\n",score);
return 0;
}
复制代码
作者:
慕名黑马生
时间:
2015-7-21 23:35
120 30 270前面两个都懂吧,第三个printf时,它代表的score还是main中的score,而不是{}中的score,那个只是局部重新定义的变量,但{}中语句-score=a+250在重新定义的变量之前,所以全局score为270.你如果调换{}中1、2句,结果为120、280、120
作者:
lclofty
时间:
2015-7-21 23:40
270=20(a)+250(score) 大括号中定义的变量会在大括号结束后释放 但是之前赋值会改变score的值 score= a+250 =20+250=270
作者:
13817049701
时间:
2015-7-21 23:42
这个问题是全局变量和局部变量的问题,如果搞不懂建议再看看如意大师的《黑马程序员_iOS基础视频_最适合初学者入门video》中第二天中的变量的作用域。多看看几遍就可以了,我觉得讲得相当的好:loveliness:
作者:
lclofty
时间:
2015-7-21 23:43
关键是看清大括号中是先定义还是先赋值 先定义不改变最初的变量的值 先赋值会改变。
作者:
qq103613
时间:
2015-7-22 00:32
120 30 270
作者:
chensc
时间:
2015-7-22 06:20
学习学习!
作者:
lychae
时间:
2015-7-22 07:16
#include <stdio.h>
int main(int argc, const char * argv[]) {
int a = 20;
int score = a+100;//这是一个全局变量,作用域是定义开始到文件末尾
printf("%d\n",score);//120
{
score = a + 250;//270,查找向上最近的score变量然后赋值
int score = 30;//定义变量,这是全局变量,作用域是从定义开始到所在}结束,局部变量作用时,会暂时替代全局变量
printf("%d\n",score);//30,
}//在次位置局部变量score释放
printf("%d\n",score);//270,此处的score是全局变量
return 0;
}
作者:
neobug
时间:
2015-7-22 12:04
谢谢各位的解答 我弄懂了
作者:
zhuozhuo
时间:
2015-9-13 19:35
可能是编译器的问题,我在VS2012上操作,打印的结果是 120,30,30.
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2