黑马程序员技术交流社区
标题:
局部变量定义提问
[打印本页]
作者:
holfioo
时间:
2015-5-12 22:31
标题:
局部变量定义提问
本帖最后由 holfioo 于 2015-5-13 19:36 编辑
今天看到这里有些不明白。
#include <stdio.h>
void test()
{
static int a = 0; //static 修饰局部变量
a++;
printf("a = %d\n", a );
}
int main()
{
test();
test();
test();
return 0;
}
复制代码
输出结果是
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