黑马程序员技术交流社区

标题: 请大家帮忙分析一下这到题的运算结果 [打印本页]

作者: 龙瑞麟    时间: 2015-5-11 01:25
标题: 请大家帮忙分析一下这到题的运算结果
本帖最后由 龙瑞麟 于 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. }
复制代码


作者: wangzhewjl    时间: 2015-5-11 09:10
本帖最后由 wangzhewjl 于 2015-5-11 09:15 编辑

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

亲,我是喊你帮忙分析,不是来让你叫我在去看视频的
作者: cogddo    时间: 2015-5-12 09:27
{}代码块,,和就近原则,,这是这类问题的核心。
作者: asd26187    时间: 2015-5-12 15:41
这个就是就近原则里的作用域的问题额!
作者: x331275955    时间: 2015-5-12 20:07
只是知道作用域在搞鬼,看起来就是乱乱的。
作者: hehelaicaicai    时间: 2015-5-13 10:17
作用域的问题,我贴个分析图给你。

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

QQ截图20150513101938.jpg

作者: 15578797612    时间: 2015-5-13 11:26
260,就近原则
作者: 龙瑞麟    时间: 2015-5-14 00:48
hehelaicaicai 发表于 2015-5-13 10:17
作用域的问题,我贴个分析图给你。

感谢您的分析
作者: xiongmaoren518    时间: 2015-5-14 08:57
hehelaicaicai 发表于 2015-5-13 10:17
作用域的问题,我贴个分析图给你。

还是你回答的最清晰啊,感谢
作者: ambition    时间: 2015-5-14 09:09
只要抓住作用域和代码块这两点,这个题就简单了
作者: 星空眼泪    时间: 2015-5-14 09:11
1楼的逻辑已经说的很清楚了,如果能理解的话,基本上能解决疑惑。
作者: gamhunter    时间: 2015-5-14 09:11
执行完第13行,第4行定义的a变为10;执行完16行,第5行定义的score变为260;给第17行定义的score赋值并不会对外面score的值有影响,在19行的“}”执行完后就释放了。所以20行打印出来的值是260。
作者: holfioo    时间: 2015-5-14 11:09
图解释很透彻。。又学习了一遍。
作者: chensc    时间: 2015-5-14 19:06
学习学习!
作者: 何志祥    时间: 2015-5-18 10:48
括号都是在main函数中的,对定义变量不起什么作用~~~
作者: 15578797612    时间: 2015-5-18 13:01
260啊,这道题我在论坛看到好多遍了,答案都记下来了
作者: 尹世伟    时间: 2015-5-18 22:06
今天刚遇到  主要就是找到 int 等  如果这个程序块中没有定义就说明要保留数据  有的话 就会随着程序块结束而清除




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2