黑马程序员技术交流社区

标题: 小弟新手,搞不懂这个输出值的问题.....求解答 [打印本页]

作者: 37°天黑    时间: 2015-4-7 22:16
标题: 小弟新手,搞不懂这个输出值的问题.....求解答
#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;
}
作者: 执念    时间: 2015-4-7 22:47
是不是120,10,30,120??
作者: 书上说、    时间: 2015-4-7 23:08
这个是代码块的问题,在c语言基础视频里有详细的讲到。。。
作者: bieny    时间: 2015-4-7 23:11
执念 发表于 2015-4-7 22:47
是不是120,10,30,120??

最后一个应该是260
作者: 流转少年    时间: 2015-4-7 23:20
  1. #include <stdio.h>

  2. int main()
  3. {
  4.     int a = 20;//定义全局变量a,初始化值为20
  5.     int score = a + 100;//此处score 变量为全局变量
  6.     printf("%d\n", score);//输出变量就是上面定义的score变量的值也就是120,要换行
  7.    
  8.     {
  9.         int score = 50;//重新定义了score变量,至于为什么不报错,跟变量的作用域有关,可以参考学习,
  10.         {
  11.             score = 10;//这个score变量赋值,只是对最近的score变量赋值,也就是上面定义的那个初始化为50的变量score
  12.             printf("%d\n", score) ;//打印的值是最近的score的值,就是10,要换行
  13.         }
  14.         a = 10;//给全局变量a重新赋值为10,因为a为全局变量,并且在最近的大括号内没有定义局部变量a.所以更改的时全局变量a的值
  15.     }
  16.    
  17.     {
  18.         score = a + 250;//在最近的大括号内没有定义score和a变量,此处使用的都是全局变量的值,加起来以后就是260,此处更改的就是全局变量score的值,改为260
  19.         int score = 30;//定义一个新的局部变量score并赋值为30
  20.         printf("%d", score);//打印最近定义的score变量的值,就是30,不换行
  21.     }
  22.    
  23.     printf("%d\n", score);//打印全局变量的值,也就是向上数第三行(大括号除外)所更改的score的值.就是260,要换行
  24.     return 0;
  25. }
  26. //输出结果
  27. 120
  28. 10
  29. 30260

复制代码

这样注释,能看懂吗?如果还有疑问,可以说,大家一起学习~~~~
作者: 举举手    时间: 2015-4-7 23:43
流转少年 发表于 2015-4-7 23:20
这样注释,能看懂吗?如果还有疑问,可以说,大家一起学习~~~~

这个太赞了,
作者: 鹏jiqing    时间: 2015-4-8 00:11
推荐好牛逼啊
作者: iMcG33k    时间: 2015-4-8 02:05
这种局部变量作用域的题很基础,只是看着绕,我只是想知道谁会写这么多相同的变量名还放的这么乱。。实际意义在哪?
作者: wzboy    时间: 2015-4-8 08:28
流转少年 发表于 2015-4-7 23:20
这样注释,能看懂吗?如果还有疑问,可以说,大家一起学习~~~~

讲的很详细,推荐给版主加技术分。
作者: 流风124    时间: 2015-4-8 12:26
其实简单来说,代码块问题就是就近原则
作者: 37°天黑    时间: 2015-4-8 21:57
bieny 发表于 2015-4-7 23:11
最后一个应该是260

是的,最后一个是260!
作者: 37°天黑    时间: 2015-4-8 22:05
流转少年 发表于 2015-4-7 23:20
这样注释,能看懂吗?如果还有疑问,可以说,大家一起学习~~~~

多谢大神解释,领教了{:3_57:}




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