局部静态变量和全局静态变量都存储在静态内存中,所以函数退出后局部静态变量不会被释放;不同于全局静态变量的是,它不是file scope visible的,也就是说在file scope 范围内是不能访问的,只能是再次调用该函数时该变量可见。
下面是转载的一段测试代码,来源于http://www.javaeye.com/topic/40705:
#include"stdafx.h"
#include <stdio.h>
int* f1(int i)
{
static int s = 2; //局部静态变量,其只在本函数之内存在。但又与局部变量相区别,其在离开函数时并不消失
s = s +i;
return &s; //可以返回地址
}
void main()
{
int *a = f1(1);
printf("cout:%d/n",*a);
a = f1(1); // s只初始化一次
printf("cout:%d/n",*a); //
//s = s+1; 出错,s在此范围不存在。其不是file scope
}
程序输出结果第一次为3,第二次为4。