黑马程序员技术交流社区

标题: 关于变量作用域的问题 [打印本页]

作者: 这是829    时间: 2015-5-18 22:08
标题: 关于变量作用域的问题
本人小白零基础入学,对于作用域问题有点儿不理解,今儿做作业遇到一道题做错了,请哪位大神帮我解答一下。题目如下:
请写出下面代码的执行结果:
#include ,<stdio.h>
{
     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",score);
     }
    printf("%d\n",score);
    return 0;
}
我自己算出来的输出结果是 120   10   30    120   老师给出的答案是  120   10   30  260  为何最有一个输出是260,中间的小块儿作用域不是结束就释放了吗,难道最后一个输出结果不和第一个输出一样吗?求解
作者: 香草芭芙    时间: 2015-5-18 23:04
  1. #include <stdio.h>
  2. int main()
  3. {
  4.     int a = 20; //main 函数结束时 才回收
  5.     int score = a + 100; //main 函数结束时 才回收

  6.     printf("%d\n", score); //120
  7.     {
  8.         int score = 50; //代码块 结束时 回收
  9.         {
  10.             score = 10; // 代码块 结束时 回收的 score 变成 10

  11.             printf("%d\n", score);//10
  12.         }
  13.         a = 10; //main 函数结束时 才回收的 a 变成 10
  14.     }
  15.     {
  16.         score = a + 250; //main 函数结束时 才回收的 a = 10 , score = 260
  17.         int score = 30;
  18.         printf("%d\n", score);//30
  19.     }
  20.     printf("%d\n", score);//260 //main 函数结束时 才回收的 score = 260
  21.     return 0;
  22. }
复制代码

作者: 649678291    时间: 2015-5-18 23:16
  作用域以及内存储存的知识点
作者: jingkai    时间: 2015-5-18 23:24
来吸取经验来了
作者: aSmallStone    时间: 2015-5-18 23:33
学习了.......
作者: 可爱的小炒肉    时间: 2015-5-19 00:10
我就看看  
作者: ambition    时间: 2015-5-19 10:47
好好学习天天向上
作者: kansiliyundi    时间: 2015-5-19 21:20
最后一个代码块有两个score 一个对应的是上面的全局变量  还有一个是int score 这个是代码块里定义的局部变量 释放的时候只释放重新Int的
作者: 天是蓝色的    时间: 2015-5-19 21:30
这道题我们刚做过
作者: 等风继续吹    时间: 2015-5-19 21:45
嘿嘿,这里我也错了.
作者: 追随自然    时间: 2015-5-19 22:08
貌似我也错了,不过公司里谁会这么写代码啊

作者: 这是829    时间: 2015-5-19 23:10
香草芭芙 发表于 2015-5-18 23:04

谢谢你的解答太清楚太详细了!
作者: lyricdon    时间: 2015-5-19 23:13
着实没什么实际意义
作者: 这是829    时间: 2015-5-19 23:14
649678291 发表于 2015-5-18 23:16
作用域以及内存储存的知识点

恩,作用域的问题现在懂了。
作者: 这是829    时间: 2015-5-19 23:25
jingkai 发表于 2015-5-18 23:24
来吸取经验来了

嘿嘿,欢迎共同交流
作者: 梦初醉    时间: 2015-5-19 23:28
画内存图很好解决的
作者: 这是829    时间: 2015-5-19 23:29
aSmallStone 发表于 2015-5-18 23:33
学习了.......

一起学习。
作者: 这是829    时间: 2015-5-19 23:33
可爱的小炒肉 发表于 2015-5-19 00:10
我就看看

看看吧,一起共同学习!
作者: 这是829    时间: 2015-5-19 23:39
可爱的小炒肉 发表于 2015-5-19 00:10
我就看看

看看吧,一起学习,:)
作者: 这是829    时间: 2015-5-19 23:42
梦初醉 发表于 2015-5-19 23:28
画内存图很好解决的

你不是张玉么
作者: aSmallStone    时间: 2015-5-19 23:53
日积月累  学习
作者: 梦初醉    时间: 2015-5-20 00:01
是的,你哪位?

作者: 这是829    时间: 2015-5-20 21:48
jingkai 发表于 2015-5-18 23:24
来吸取经验来了

共同学习
作者: doushu    时间: 2015-5-20 21:53
顶顶顶

作者: 这是829    时间: 2015-5-20 22:19
kansiliyundi 发表于 2015-5-19 21:20
最后一个代码块有两个score 一个对应的是上面的全局变量  还有一个是int score 这个是代码块里定义的局部变 ...

恩,知道了
作者: 这是829    时间: 2015-5-20 23:01
等风继续吹 发表于 2015-5-19 21:45
嘿嘿,这里我也错了.

恩,新手比较容易出错。
作者: woaidd99    时间: 2015-5-21 22:24
看作用域   双击大括号    那些选中 就是作用域啊
作者: woaidd99    时间: 2015-5-21 22:27
香草芭芙 发表于 2015-5-18 23:04

a = 10 为什么是主函数结束后才回收啊
作者: 宋兴1228    时间: 2015-5-22 00:32
好好学习天天向上




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