关键字static作用
static–声明静态变量、函数。static有三个主要作用。
1.限制了变量、函数的作用域。
2.改变了变量、函数的存储域。
3.定义未赋值时,初始化值为0。
static可以对局部变量、全局变量、局部函数使用。定义方法,比如
//static.c文件中
#include<stdio.h>
static int a = 0; //定义静态全局变量
static int a_a; //定义静态全局变量,未赋值
void static_test()
{
static int b = 0; //定义静态局部变量
int c = 0; //定义局部变量
static int b_b; //定义静态局部变量,未赋值
a++;
b++;
c++;
printf("a=%d,a_a:%d,b=%d,b_b:%d,c=%d\n",a,a_a,b,b_b,c);
return;
}
static void static_test1() //定义静态局部函数
{
printf("static test !!!\n");
return;
}
int main()
{
int i = 0;
static_test1();
for(i=0;i<6;i++)
{
static_test();
}
return 0;
}
@限制了变量、函数的使用域。
如上代码所示,静态全局变量a只能作用于static.c文件中,比如在另外一个文件static_tmp.c将不能使用。
静态局部变量b只能作用于static_test()函数中,比如在static_test1() 中将不能使用。
静态局部函数static_test1() 只能作用于static.c,比如在另外一个文件static_tmp.c将不能使用。
这样做可以增加安全性,也可以避免在其它源文件中、函数中引起错误。
@.改变了变量、函数的存储域。
程序的函数的参数值、局部变量存在于(栈)中,全局变量存在于(静态区 )中,动态申请数据存在于( 堆)中。
static全局变量,存储域没改变。
static局部变量,存储域被设置在了静态区中。
static函数,存储域被设置在了静态区中。
@定义未赋值时,初始化值为0。
static全局变量,只初使化一次,防止在其他文件单元中被引用。
static局部变量,只被初始化一次,下一次依据上一次结果值。
static函数,在内存中只有一份,普通函数在每个被调用中维持一份拷贝。
如上代码所示,运行结果:
static test !!!
a=1,a_a:0,b=1,b_b:0,c=1
a=2,a_a:0,b=2,b_b:0,c=1
a=3,a_a:0,b=3,b_b:0,c=1
a=4,a_a:0,b=4,b_b:0,c=1
a=5,a_a:0,b=5,b_b:0,c=1
a=6,a_a:0,b=6,b_b:0,c=1