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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© الغيوم_ا 中级黑马   /  2014-7-14 23:14  /  1427 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

代码一:
int a = 111;
{
            a = 100;
        {
                   a = 222;
              printf("a=%d\n",a);
         }
         printf("a=%d\n",a);
}
printf("a=%d\n",a);
代码二:int a = 111;
{
        int a = 100;
        {
              int  a = 222;
              printf("a=%d\n",a);
         }
         printf("a=%d\n",a);
}
printf("a=%d\n",a);

评分

参与人数 1技术分 +1 收起 理由
傘が咲く + 1

查看全部评分

5 个回复

倒序浏览
你这两个代码的区别在于第三行,第一段代码是  a = 100;   第二段代码是 int a = 100; 这意义就不一样了。
首先第一段代码中 a = 100; 它会去找最近的 a ,可是在第三行前面只有一个 int a = 111; 所以,它会把你一开始设置的 a = 111 改成 a = 100 所以第三个printf输出的时候是100。而第二段代码是临时又声明了一个a 这时,它就不会向上去寻找 a 变量了。所以第三个printf输出的时候是111。

评分

参与人数 1技术分 +1 收起 理由
傘が咲く + 1

查看全部评分

回复 使用道具 举报
第一段代码是单纯的对一个变量进行 多次改变赋值  但是最终输出的三个结果都是222  而 第二段代码则是在大代码块内嵌套出现了两个代码快  虽然都是名字叫a但是却是不同的  这是应该就近原则取值 分别是222  111  100

评分

参与人数 1技术分 +1 收起 理由
傘が咲く + 1

查看全部评分

回复 使用道具 举报
代码一:222,222,222
代码二:222,100,111.
每次对a重新声明时,从新定义a的那一行起,a就相当于一个新的变量,直到新定义a到其作用域结束,它的生命周期也随之结束。
回复 使用道具 举报
考的是变量的作用域嘛,恩恩。
回复 使用道具 举报
这是作用域的问题,{}就相当于一个作用域,走出}就意味着{}里面定义的变量将被清除掉
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马