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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© holfioo 中级黑马   /  2015-5-12 22:31  /  1595 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 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 ,用完即销毁,更加节省内存呢。。


10 个回复

倒序浏览
因为这个变量用static修饰以后,延长了生命周期,他要在程序运行结束以后才会被销毁,而如果不用static修饰的局部变量在调用完变量以后就被销毁,再次调用这个变量的时候才又再一次创建
回复 使用道具 举报
特殊情况特殊对待
回复 使用道具 举报
有的情况是不需要它回收,如果用完就回收,每次都需要重新再分配空间,再赋值,从这个角度来说是优化性能的
回复 使用道具 举报
static修饰局部变量,并不会改变局部变量的作用域,但是会延长局部变量的生命周期。就是说在test()函数调用完的时候,a并不会别销毁,等到整个程序结束的时候局部变量才会被销售。所以再次调test(),会直接把a再拿出来用,而不是重新再定义。

点评

我还需要再理解理解  发表于 2015-5-13 15:23
回复 使用道具 举报
新人来学习了
回复 使用道具 举报
static就是给a分配了内存之后到结束内存才会被回收,如果不加static,输出的结果应该就是a = 1;a = 1;a = 1;了
回复 使用道具 举报
Rdxer 中级黑马 2015-5-13 17:34:44
8#
看需求吧,,,,有时候这样可以解决很多问题
回复 使用道具 举报
CornerFly 发表于 2015-5-13 16:20
static就是给a分配了内存之后到结束内存才会被回收,如果不加static,输出的结果应该就是a = 1;a = 1;a = ...

已经了解了~
回复 使用道具 举报
mony 中级黑马 2015-5-15 20:48:05
10#
优化性能和节省内存是两个概念吧
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马