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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 易拉罐 中级黑马   /  2014-11-8 18:02  /  1458 人查看  /  12 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

#include  <stdion.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);

    return 0;
}


输出结果:
120
10
30

260

请问为什么最后一个printf()输出是260?而不是120呢?


评分

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

查看全部评分

12 个回复

倒序浏览
没有人会吗?
回复 使用道具 举报
#include <stdio.h>

int main(int argc, const char * argv[])
{
    int a = 20;
    int score = a + 100;
    printf("1:%d\n", score);
   
    {
        int score = 50;
        printf("2:%d\n",score);
        {
            score = 10;
            printf("3:%d\n", score);
        }
        a = 10;
    }
    {
        score = a + 250;
        printf("4:%d\n",score);
        int score = 30;
        printf("5:%d\n", score);
    }
   
    printf("6:%d\n", score);
    return 0;
}
结果是:
1:120
2:50
3:10
4:260
5:30
6:260

这样也就说明了   两个大括号之间是平行的关系,6:260可以不看,那么4:260的时候a就是10,说明是上面的大括号里面的数据,在这个大括号也可以使用。一开始也不是太明白,后来看懂了。算是长知识了,但是感觉实际意义不太大。。。没有人会这样用大括号的。。。
回复 使用道具 举报
最后一个输出的的是,
回复 使用道具 举报
哈利梅 发表于 2014-11-8 19:18
#include

int main(int argc, const char * argv[])

怎么会没有实际意义呢,只是我们还没有在实际当中应用而已。通过你的回答,明白了。我记得看C语言视频的时候,这就是内部代码块,能很好的控制内部变量。
回复 使用道具 举报
最后一个输出的的是,{         score = a + 250;         int score = 30;         printf("%d\n", score);     }这里边score=a+250的值,原因是:最后一个printf就近score从输出,但不输出上边int score = 30;的值,因为它在作用域只在大括号内,出了大括号,它就不存在了;而score=a+250中的score是在大括号外被定义就是第四行的score,大括号程序结束它仍然有值,输出的就是他,当然它被重新赋值了。其实只要记住int score只在包含它的大括号内有效,包括大括号内的大括号,就行了。
回复 使用道具 举报
251143492 发表于 2014-11-8 19:56
最后一个输出的的是,

最后一个输出的是260
回复 使用道具 举报
251143492 发表于 2014-11-8 20:10
最后一个输出的的是,{         score = a + 250;         int score = 30;         printf("%d\n", score) ...

谢谢你的回答,看来我的C语言的变量作用域还没有学好。
回复 使用道具 举报
易拉罐 发表于 2014-11-8 20:10
最后一个输出的是260

#include <stdio.h>

int main(int argc, const char * argv[])
{
    int a = 20;
    int score = a + 100;
    printf("1:%d\n", score);
   
    {
        int score = 50;
        printf("2:%d\n",score);
        {
            score = 10;
            printf("3:%d\n", score);
        }
        a = 10;
    }
    {
       score = a + 250;
        int score = 30;
        printf("5:%d\n", score);
    }
   
    printf("6:%d\n", score);
    return 0;
}
我用相同颜色表示的是同一个,你看看能不能懂
回复 使用道具 举报
251143492 发表于 2014-11-8 20:20
#include

int main(int argc, const char * argv[])

score = a + 250,这个a=10
回复 使用道具 举报
251143492 发表于 2014-11-8 20:22
score = a + 250,这个a=10

谢谢!!!!!
回复 使用道具 举报
这是累加的,并不是运行完了 值就释放
回复 使用道具 举报
学习一下。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马