黑马程序员技术交流社区

标题: 为什么最后输出的是260? [打印本页]

作者: 易拉罐    时间: 2014-11-8 18:02
标题: 为什么最后输出的是260?
#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呢?



作者: 易拉罐    时间: 2014-11-8 18:56
没有人会吗?
作者: 哈利梅    时间: 2014-11-8 19:18
#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,说明是上面的大括号里面的数据,在这个大括号也可以使用。一开始也不是太明白,后来看懂了。算是长知识了,但是感觉实际意义不太大。。。没有人会这样用大括号的。。。
作者: 251143492    时间: 2014-11-8 19:56
最后一个输出的的是,
作者: 易拉罐    时间: 2014-11-8 20:09
哈利梅 发表于 2014-11-8 19:18
#include

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

怎么会没有实际意义呢,只是我们还没有在实际当中应用而已。通过你的回答,明白了。我记得看C语言视频的时候,这就是内部代码块,能很好的控制内部变量。
作者: 251143492    时间: 2014-11-8 20:10
最后一个输出的的是,{         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只在包含它的大括号内有效,包括大括号内的大括号,就行了。
作者: 易拉罐    时间: 2014-11-8 20:10
251143492 发表于 2014-11-8 19:56
最后一个输出的的是,

最后一个输出的是260
作者: 易拉罐    时间: 2014-11-8 20:14
251143492 发表于 2014-11-8 20:10
最后一个输出的的是,{         score = a + 250;         int score = 30;         printf("%d\n", score) ...

谢谢你的回答,看来我的C语言的变量作用域还没有学好。
作者: 251143492    时间: 2014-11-8 20:20
易拉罐 发表于 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:22
251143492 发表于 2014-11-8 20:20
#include

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

score = a + 250,这个a=10
作者: 易拉罐    时间: 2014-11-8 22:43
251143492 发表于 2014-11-8 20:22
score = a + 250,这个a=10

谢谢!!!!!
作者: pingfan183    时间: 2014-11-8 23:48
这是累加的,并不是运行完了 值就释放
作者: caozhichao    时间: 2014-11-9 04:04
学习一下。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2