黑马程序员技术交流社区

标题: 这两个代码的区别 [打印本页]

作者: الغيوم_ا    时间: 2014-7-14 23:14
标题: 这两个代码的区别
代码一:
int a = 111;
{
            a = 100;
        {
                   a = 222;
              printf("a=%d\n",a);
         }
         printf("a=%d\n",a);
}
printf("a=%d\n",a);
代码二:int a = 111;
{
        int a = 100;
        {
              int  a = 222;
              printf("a=%d\n",a);
         }
         printf("a=%d\n",a);
}
printf("a=%d\n",a);


作者: Moebius    时间: 2014-7-15 00:28
你这两个代码的区别在于第三行,第一段代码是  a = 100;   第二段代码是 int a = 100; 这意义就不一样了。
首先第一段代码中 a = 100; 它会去找最近的 a ,可是在第三行前面只有一个 int a = 111; 所以,它会把你一开始设置的 a = 111 改成 a = 100 所以第三个printf输出的时候是100。而第二段代码是临时又声明了一个a 这时,它就不会向上去寻找 a 变量了。所以第三个printf输出的时候是111。
作者: 云霄之上    时间: 2014-7-15 00:51
第一段代码是单纯的对一个变量进行 多次改变赋值  但是最终输出的三个结果都是222  而 第二段代码则是在大代码块内嵌套出现了两个代码快  虽然都是名字叫a但是却是不同的  这是应该就近原则取值 分别是222  111  100
作者: 温天恩    时间: 2014-7-15 08:19
代码一:222,222,222
代码二:222,100,111.
每次对a重新声明时,从新定义a的那一行起,a就相当于一个新的变量,直到新定义a到其作用域结束,它的生命周期也随之结束。
作者: caopengxu    时间: 2014-7-15 21:35
考的是变量的作用域嘛,恩恩。
作者: 丶白菜你个小番    时间: 2014-7-17 14:31
这是作用域的问题,{}就相当于一个作用域,走出}就意味着{}里面定义的变量将被清除掉




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