黑马程序员技术交流社区

标题: 全局变量和局部变量的问题 [打印本页]

作者: 二狗    时间: 2014-4-16 03:18
标题: 全局变量和局部变量的问题
为什么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. }
复制代码



作者: stone24    时间: 2014-4-16 03:55
调用test函数,里面a++作用于外面的全部变量a ,输出的时候,也是输出全局变量a的值,当函数执行完,代码所有东西被回收,而a不会受影响,当第二次调用时,b在函数内又重新定义,所以不管调用多少函数,输出b的值都是不变的,而a就会一直递增。
作者: 墨迹的可乐    时间: 2014-4-16 04:58
  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. }
复制代码
局部变量所分配的内存会在它所在的函数调用完成用释放,下一次调用会重新分配内存,而全局变量则会一直存在,直到程序结束。

作者: m573555543    时间: 2014-4-16 06:00
   a++;
   
    int b = 0;
   
    b ++;
   
    printf("a=%d,b=%d\n",a,b);
    这段代码的意思是:定义一个整型变量b,赋值为0。然后b自加。输出b。
在返回到定义一个整型变量b,赋值为0。然后b自加。
一直到循环语句结束都是这样。
所以b=1
作者: 王雪冬    时间: 2014-4-16 07:06
看代码中的注释:
  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
作者: 李烨    时间: 2014-4-16 08:12
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.




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