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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© chunjiang 中级黑马   /  2015-9-1 14:33  /  1087 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

#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", score);
    }
   
    printf("%d\n", score);
    return 0;
}
score的输出是什么?

4 个回复

倒序浏览
120、10、30、260
回复 使用道具 举报
120
10
30260

30后面没有换行符
我粗暴地理解为:被创建的变量的生存期 不超过其创建时所存在大括号的范围,超过大括号时,这个变量被删除。同一个大括号里面同一个变量无法创建两次,嵌套与被嵌套的大括号里,同名变量优先使用最近创建的那个变量。

int main()
{
    int a = 20;                                         //a==20
    int score = a + 100;                         //score==120     将这个score标记为score_0
    printf("%d\n", score);                      //第一行输出:   120
   
    {
        int score = 50;                            //重新定义局部变量  score==50  假设标记它为 score_1     
        {
            score = 10;                             //将score_1重新赋值为10
            printf("%d\n", score);             //输出score_1   :      10
        }        a = 10;                                        //  a==10
    }
                                                           //到此为止 score_1被删除
    {
        score = a + 250;                        //将score_0赋值为a+250=260
        int score = 30;                           //重新定义一个score,假设标记为score_2,score_2==30
        printf("%d", score);                   //输出score_2  :30       但是后面没有加换行符  所以后面的输出会直接跟在30后面
    }
                                                         //到此为止   score_2 被删除
    printf("%d\n", score);                   //输出score_0的值 :260   
    return 0;
}


回复 使用道具 举报 1 0

嘻嘻。看完秒懂,啦啦啦,谢啦
回复 使用道具 举报
120
10
30
260
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马