c语言之static
static是函数或者文件中的永久变量。
static分为static局部变量和static全局变量。
两者的区别主要是在可见性,static局部变量只是在其被声明的代码块中可见。
1、static局部变量
static局部变量可以使子程序多次调用之间保持局部变量值。
例如:
int fun(void);
int main(void)
{
int x;
x=fun();
printf(" First transfer function a is %d\n",x);
x=fun();
printf(" Second transfer function a is %d\n",x);
x=fun();
printf(" Third transfer function a is %d\n",x);
getch();
return 0;
}
int fun(void)
{
int a=0;
a+=100;
return a;
}
程序结果为:
First transfer function a is 100
Second transfer function a is 100
Third transfer function a is 100
那么我们稍稍做下修改,将fun中的a定义成static int
fun函数如下:
int fun(void)
{
static int a=0;
a+=100;
return a;
}
程序执行结果:
First transfer function a is 100
Second transfer function a is 200
Third transfer function a is 300
对比两个函数我们可以发现,普通局部变量是进入函数是产生,退出函数时候消亡,static局部变量
使子程序多次调用之间保持局部变量值。也就是说当第一次调用后,a的值是100,第二次调用a的初始值不是
0而是100。
2、static全局变量
static全局变量在定义该变量的文件中可见,其它功能和static局部变量相同。其它文件中的子程序无法访问和修改,可以参照上篇的文章
和extern的第二个功能做一下比较。
例如:
static int a;
int fun(void);
void fun2(int y);
int main(void)
{
int x;
fun2(100);
x=fun();
printf(" First transfer function a is %d\n",x);
x=fun();
printf(" Second transfer function a is %d\n",x);
x=fun();
printf(" Third transfer function a is %d\n",x);
getch();
return 0;
}
int fun(void)
{
a+=100;
return a;
}
void fun2(int y)
{
a=y;
}
程序结果为:
First transfer function a is 200
Second transfer function a is 300
Third transfer function a is 400
其效果和static局部变量一样,只不过是在整个文件中可见。
fun可以访问,fun2可以访问。而在第一个例子中只能是在fun中可见。