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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 二狗 中级黑马   /  2014-4-16 03:18  /  1422 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

为什么a的值每次都会增加 而b的值每次不变
  1. #include <stdio.h>

  2. int a = 10;

  3. void test()
  4. {
  5.     a++;
  6.    
  7.     int b = 0;
  8.    
  9.     b ++;
  10.    
  11.     printf("a=%d,b=%d\n",a,b);
  12.    
  13. }

  14. int main()
  15. {
  16.    
  17.     test();
  18.     test();
  19.     test();
  20.    
  21.    
  22.     return 0;
  23. }
复制代码


评分

参与人数 1黑马币 +2 收起 理由
jing迪 + 2

查看全部评分

5 个回复

倒序浏览
调用test函数,里面a++作用于外面的全部变量a ,输出的时候,也是输出全局变量a的值,当函数执行完,代码所有东西被回收,而a不会受影响,当第二次调用时,b在函数内又重新定义,所以不管调用多少函数,输出b的值都是不变的,而a就会一直递增。
回复 使用道具 举报
  1. #include <stdio.h>
  2. int a = 10;                                       //定义全局变量a
  3. void test()
  4. {
  5.     a++;                                           //a+1
  6.     int b = 0;                                    //定义局部变量b
  7.     b ++;                                          //b+1
  8.     printf("a=%d,b=%d\n",a,b);     //打印出a,b的值,之后函数调用结束,释放内存,b的值也不复存在
  9. }
  10. int main()
  11. {
  12.     test();                                      //a=11 ,b=1
  13.     test();                                      //a=12, b=1
  14.     test();                                      //a=13, b=1
  15.     return 0;
  16. }
复制代码
局部变量所分配的内存会在它所在的函数调用完成用释放,下一次调用会重新分配内存,而全局变量则会一直存在,直到程序结束。

评分

参与人数 1黑马币 +2 收起 理由
jing迪 + 2

查看全部评分

回复 使用道具 举报
   a++;
   
    int b = 0;
   
    b ++;
   
    printf("a=%d,b=%d\n",a,b);
    这段代码的意思是:定义一个整型变量b,赋值为0。然后b自加。输出b。
在返回到定义一个整型变量b,赋值为0。然后b自加。
一直到循环语句结束都是这样。
所以b=1
回复 使用道具 举报
看代码中的注释:
  1. #include <stdio.h>

  2. int a = 10;                //这里声明是全局变量

  3. void test()
  4. {
  5.     a++;
  6.    
  7.     int b = 0;     //这里是局部变量
  8.    
  9.     b ++;
  10.    
  11.     printf("a=%d,b=%d\n",a,b);
  12.    
  13. }

  14. int main()
  15. {
  16.    
  17.     test();
  18.     test();
  19.     test();
  20.    
  21.    
  22.     return 0;
  23. }
复制代码


当在main函数进行 test()时,a的值是不会被重新定义赋值的,所以a的值每次都会在原来的基础上增加1

而b是定义在test函数体内的,每次进行test(),b都会被从新定义初值化,所以每次b都是1

评分

参与人数 1黑马币 +2 收起 理由
jing迪 + 2

查看全部评分

回复 使用道具 举报
void test()
{
    a++;
   
    int b = 0;
   
    b ++;
   
    printf("a=%d,b=%d\n",a,b);
   
}
*****************************************************
首次int b是test()函数里的局部变量,每次调用test()的时候int b = 0都会把b重新赋值,不管以前都少,到这句话都重新赋值为0,所以b一直是0.
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马