黑马程序员技术交流社区

标题: 局部变量定义提问 [打印本页]

作者: holfioo    时间: 2015-5-12 22:31
标题: 局部变量定义提问
本帖最后由 holfioo 于 2015-5-13 19:36 编辑

今天看到这里有些不明白。
  1. #include <stdio.h>
  2. void test()
  3. {
  4.     static int a = 0;  //static 修饰局部变量
  5.     a++;
  6.     printf("a = %d\n", a );
  7. }
  8. int main()
  9. {
  10.     test();
  11.     test();
  12.     test();
  13.     return 0;
  14. }
复制代码
输出结果是
a = 1
a = 2
a = 3

mj老师是讲,就分配一次局部变量,说这样能够优化性能。
但是a的值已经改变了呀。。

老师怎么说,这样保证a不变呢?

我怎么感觉,不用static ,用完即销毁,更加节省内存呢。。



作者: shenxian88    时间: 2015-5-13 01:16
因为这个变量用static修饰以后,延长了生命周期,他要在程序运行结束以后才会被销毁,而如果不用static修饰的局部变量在调用完变量以后就被销毁,再次调用这个变量的时候才又再一次创建
作者: wws    时间: 2015-5-13 01:38
特殊情况特殊对待
作者: welfarezhang    时间: 2015-5-13 11:12
有的情况是不需要它回收,如果用完就回收,每次都需要重新再分配空间,再赋值,从这个角度来说是优化性能的
作者: hehelaicaicai    时间: 2015-5-13 11:21
static修饰局部变量,并不会改变局部变量的作用域,但是会延长局部变量的生命周期。就是说在test()函数调用完的时候,a并不会别销毁,等到整个程序结束的时候局部变量才会被销售。所以再次调test(),会直接把a再拿出来用,而不是重新再定义。
作者: jingkai    时间: 2015-5-13 11:23
新人来学习了
作者: CornerFly    时间: 2015-5-13 16:20
static就是给a分配了内存之后到结束内存才会被回收,如果不加static,输出的结果应该就是a = 1;a = 1;a = 1;了
作者: Rdxer    时间: 2015-5-13 17:34
看需求吧,,,,有时候这样可以解决很多问题
作者: holfioo    时间: 2015-5-13 19:36
CornerFly 发表于 2015-5-13 16:20
static就是给a分配了内存之后到结束内存才会被回收,如果不加static,输出的结果应该就是a = 1;a = 1;a = ...

已经了解了~
作者: mony    时间: 2015-5-15 20:48
优化性能和节省内存是两个概念吧




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