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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  1. #include <stdio.h>

  2. int main(int argc, const char * argv[]) {
  3.     int a = 20;
  4.     int  score = a+100;
  5.     printf("%d\n",score);
  6.    
  7.     {
  8.    
  9.         score = a + 250;
  10.         int score = 30;
  11.         printf("%d\n",score);
  12.    
  13.     }
  14.     printf("%d\n",score);
  15.    
  16.    
  17.     return 0;
  18. }
复制代码

11 个回复

倒序浏览
结果是  120   30  270
最后一个270是怎么得来的啊?  作用域有点没搞清楚啊
回复 使用道具 举报
完整代码其实是这样
  1. int main(int argc, const char * argv[]) {
  2.     int a = 20;
  3.     int  score = a+100;
  4.     printf("%d\n",score);
  5.    
  6.     {
  7.    
  8.         int score = 50;
  9.         {
  10.         
  11.             score = 10;
  12.             printf("%d\n",score);
  13.         
  14.         
  15.         }
  16.         a = 10;
  17.     }
  18.     {
  19.    
  20.         score = a + 250;
  21.         int score = 30;
  22.         printf("%d\n",score);
  23.    
  24.     }
  25.     printf("%d\n",score);
  26.    
  27.    
  28.     return 0;
  29. }
复制代码
回复 使用道具 举报
120     30    270前面两个都懂吧,第三个printf时,它代表的score还是main中的score,而不是{}中的score,那个只是局部重新定义的变量,但{}中语句-score=a+250在重新定义的变量之前,所以全局score为270.你如果调换{}中1、2句,结果为120、280、120
回复 使用道具 举报
lclofty 来自手机 中级黑马 2015-7-21 23:40:14
报纸
270=20(a)+250(score)  大括号中定义的变量会在大括号结束后释放 但是之前赋值会改变score的值 score= a+250 =20+250=270
回复 使用道具 举报
这个问题是全局变量和局部变量的问题,如果搞不懂建议再看看如意大师的《黑马程序员_iOS基础视频_最适合初学者入门video》中第二天中的变量的作用域。多看看几遍就可以了,我觉得讲得相当的好:loveliness:
回复 使用道具 举报
lclofty 来自手机 中级黑马 2015-7-21 23:43:16
7#
关键是看清大括号中是先定义还是先赋值 先定义不改变最初的变量的值 先赋值会改变。
回复 使用道具 举报
120  30    270
回复 使用道具 举报
chensc 金牌黑马 2015-7-22 06:20:40
9#
学习学习!
回复 使用道具 举报
#include <stdio.h>
   
    int main(int argc, const char * argv[]) {
        int a = 20;
        int  score = a+100;//这是一个全局变量,作用域是定义开始到文件末尾
        printf("%d\n",score);//120
        
        {
            
            score = a + 250;//270,查找向上最近的score变量然后赋值
            int score = 30;//定义变量,这是全局变量,作用域是从定义开始到所在}结束,局部变量作用时,会暂时替代全局变量
            printf("%d\n",score);//30,
            
        }//在次位置局部变量score释放
        printf("%d\n",score);//270,此处的score是全局变量
        
        
        return 0;
    }
回复 使用道具 举报
谢谢各位的解答 我弄懂了
回复 使用道具 举报
可能是编译器的问题,我在VS2012上操作,打印的结果是 120,30,30.
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马