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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 远人 中级黑马   /  2014-3-19 11:04  /  1342 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 远人 于 2014-3-20 12:17 编辑

下面是老师讲解的“变量在代码块中的作用域”的一段代码(中文注释是根据老师讲解我理解做的笔记,也好让大家理解我的思路):

#include <stdio.h>

int main(int argc, const char * argv[])
{
    /*{
        int a = 10;//这里的代码块只能在这个{}中有效使用,其作用域是不能逃出此{}
    }//这个}执行代表这块{}函数执行完毕,将在内存中消失
    printf("a = %d",a);//所以这里的printf函数不能使用变量a
    */
    int  score = 100;
   
    {
        int score = 200;
        {
             score = 50;
        }
        printf("score = %d",score);//这里能调用外面的score变量(注释此代码块中的int score=200做实验),但是因为代码块存在,所以这里的printf输出采取就近原则,而不是给score赋值两次,(如果赋值两次,那么第二个printf输出也是200,但结果是100,充分证明了代码块中的就近原则)
    }
   
    printf("score = %d",score);
    return 0;
}
在代码块中再次加入代码块{ score = 50  }之后,为什么这里的score的值能修改这个代码块之外的score的值,导致最终输出结果是score = 50 ,score = 100  ;  而不是score = 200 , score = 100?

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

2 个回复

倒序浏览
沙洲冷 来自手机 中级黑马 2014-3-19 14:49:32
沙发
因为在代码块{score = 50;}中没有找到变量score,所以它会自动到代码块外面找,根据就近原则,它会把最近的int score = 200;中score的值改为50。如果把代码块{score = 50;}改为{int score = 50;},它会在该代码块内新建一个score变量,并赋值为50,不会影响代码块外面的score,这时,第一个printf函数输出就是score = 200了。不知道楼主懂了没,这个基础视频有讲,建议楼主再回看一下基础视频。

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报
{score = 50;}没有定义,他只是个赋值,{int score = 50;}在里面单独建立一个score变量就不影响外面
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马