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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

最近看基础教程,关于代码块的问题,程序是按行由上往下走的,一个代码块运行完这个代码块在内存中就消失了,这么理解是没错的吧?前三个输出我答的跟终端输出一样分别是120、10、30,可是最后一个函数输出终端计算的是260,小弟实在不解释怎么得出来的,还请各位帮忙...
#include <stdio.h>

int main()
{
    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/n", score);
    }
   
    printf("%d\n", score); /*(就这一步的输出结果终端计算的是260,小弟实在不解释怎么得出的,还请懂的帮忙分析下,小弟基础差,越详细越好,感激不尽*/
    return 0;
}

评分

参与人数 1技术分 +1 收起 理由
星河鹭起 + 1

查看全部评分

15 个回复

倒序浏览
这个你最好还是把教程再用心看一下 我相信你就会懂了 现在即使跟你说的很详细,你基础不过关 还是是不行的
回复 使用道具 举报
scoure 是全局变量,还需要详细说吗?
回复 使用道具 举报
  都是局部变量      ,两个大括号之间的代码称为代码块,那个a =10 就把a的值由改成10,  score = a + 250,把score变成了260   所以最后 printf("%d\n", score); 就是260了啊
回复 使用道具 举报
赵志文 发表于 2014-10-9 22:17
都是局部变量      ,两个大括号之间的代码称为代码块,那个a =10 就把a的值由改成10,  score = a + 250,把 ...

慢慢的我似乎理解一点了,有时会被一个东西卡住,然后就一直出不来,有人稍微点播下,换换脑子自己可能就慢慢理解了,不管怎样,还是谢谢各位
回复 使用道具 举报
alpha.huai 发表于 2014-10-9 21:16
scoure 是全局变量,还需要详细说吗?

谢谢您的指点
回复 使用道具 举报
编译器是如何找变量的?
以下是个人理解啊,

{ // 这个可以说是根代码块吧 ROOT
   // A 和 B 的等级相同的
  {/*代码块A*/} // 这个可以说是字代码块 A
  {/*代码块B*/} // 这个可以说是字代码块 B
}
等级关系 ROOT > A  = B
如果代码块中含有一个变,在该代码块内它这一行前面没有明确的声明和定义,那么它就会去比它高一级代码块(不会去跟他等级相同的代码块中寻找)中寻找,直到找到为止(如果没有的话就报错了),理解这个规律你可以再看以下应该就直到了

点评

说到了点子上了。 卤煮,误解在于自己定义的一个局部变量 int score = 30; 我刚刚开始看的时候也晕了。  发表于 2014-10-10 20:52
回复 使用道具 举报
会飞的蜗牛 来自手机 中级黑马 2014-10-9 23:12:56
8#
最后输出的是全局变量score
回复 使用道具 举报
会飞的蜗牛 发表于 2014-10-9 23:12
最后输出的是全局变量score

对的,我没把全局变量和局部变量分清
回复 使用道具 举报
米匠 中级黑马 2014-10-10 15:16:55
10#
可以理解为,执行完的代码就是走完了,不走那了,并没有消失,,,,代码在内存中是存放在code segment,这块内存是专门存放代码的
回复 使用道具 举报
这段代码很坑爹啊,C语言中,程序块内的变量一边不与程序块外部或者全局变量一样。这样容易引起错误与混乱。在这个结构块中 {
        score = a + 250;
        int score = 30;
        printf("%d/n", score);
    }
    定义了一个常量与全局变量名字一模一样,不是来坑人的么??
回复 使用道具 举报
duzhong 发表于 2014-10-10 17:16
这段代码很坑爹啊,C语言中,程序块内的变量一边不与程序块外部或者全局变量一样。这样容易引起错误与混乱 ...

这段代码就是用来调戏我们的。
楼上的有一个说到了问题的根本,学习了。
回复 使用道具 举报
coyote 中级黑马 2014-10-10 22:58:29
13#
最后输出的score是全局变量,score=10+250=260;后面定义那个score在代码块结束就释放了
回复 使用道具 举报
哪个RD要是写出这种程序代码,别说自己过不去,测试都会鄙视。
回复 使用道具 举报
没看到后面a的值变为10了吗,10+250=260呗,最后输出的是全局变量中的score
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马