A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 龙瑞麟 于 2015-5-11 01:28 编辑

请大家帮忙分析一下这到题,主要是最后面的那一个260是怎么来得
  1. #include <stdio.h>
  2. int main()
  3. {
  4.     int a = 20;
  5.     int score = a + 100;
  6.     printf("%d\n", score);//--->120
  7.     {
  8.         int score = 50;
  9.         {
  10.             score = 10;
  11.             printf("%d\n", score);//---->10
  12.         }
  13.         a = 10;
  14.     }
  15.     {
  16.         score = a + 250;
  17.         int score = 30;
  18.         printf("%d\n", score);//---->30
  19.     }
  20.     printf("%d\n", score);
  21.     return 0;
  22. }
复制代码

21 个回复

倒序浏览
本帖最后由 wangzhewjl 于 2015-5-11 09:15 编辑

score = 260? 就近原则,看变量的时候在{}中就直接用{}里的,{}里没有的就去上一层的{}中去找,一直找到这个变量。{}里面从上往下,没有运行到的语句就没执行,{}中定义了变量会在{}执行结束时销毁。
回复 使用道具 举报
score = a + 250;
  是这句代码的作用,在当时的代码块中没有找到score这个变量,就会去外部找,找到之后就会将这个值赋值给外部这个变量,此时的a的值是10 (原理相同),所以score的值被改为260
回复 使用道具 举报
记住就近原则,找最近的来赋值
回复 使用道具 举报
这道题以前在论坛都有见过了。作用域的问题。
回复 使用道具 举报
回去再看看mj老师的视频吧,有讲过在作用域的时候,
回复 使用道具 举报
飞翔的猪 发表于 2015-5-11 14:04
回去再看看mj老师的视频吧,有讲过在作用域的时候,

亲,我是喊你帮忙分析,不是来让你叫我在去看视频的
回复 使用道具 举报
cogddo 中级黑马 2015-5-12 09:27:33
8#
{}代码块,,和就近原则,,这是这类问题的核心。
回复 使用道具 举报
这个就是就近原则里的作用域的问题额!
回复 使用道具 举报
只是知道作用域在搞鬼,看起来就是乱乱的。
回复 使用道具 举报
作用域的问题,我贴个分析图给你。

QQ截图20150513101938.jpg (124.73 KB, 下载次数: 18)

QQ截图20150513101938.jpg
回复 使用道具 举报 2 0
260,就近原则
回复 使用道具 举报
hehelaicaicai 发表于 2015-5-13 10:17
作用域的问题,我贴个分析图给你。

感谢您的分析
回复 使用道具 举报
hehelaicaicai 发表于 2015-5-13 10:17
作用域的问题,我贴个分析图给你。

还是你回答的最清晰啊,感谢
回复 使用道具 举报
ambition 来自手机 中级黑马 2015-5-14 09:09:23
15#
只要抓住作用域和代码块这两点,这个题就简单了
回复 使用道具 举报
1楼的逻辑已经说的很清楚了,如果能理解的话,基本上能解决疑惑。
回复 使用道具 举报
执行完第13行,第4行定义的a变为10;执行完16行,第5行定义的score变为260;给第17行定义的score赋值并不会对外面score的值有影响,在19行的“}”执行完后就释放了。所以20行打印出来的值是260。
回复 使用道具 举报
holfioo 来自手机 中级黑马 2015-5-14 11:09:16
18#
图解释很透彻。。又学习了一遍。
回复 使用道具 举报
学习学习!
回复 使用道具 举报
括号都是在main函数中的,对定义变量不起什么作用~~~
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马