静态变量
静态变量
在变量声明之前加static,叫静态变量,不加的话叫自动变量.静态变量分为静态全局变量和静态局部变量.简单认识静态变量和自动变量
static int num = 100; //静态全局变量
void test()
{
static int num = 100; //静态局部变量
auto int val = 100; //自动变量,一般会省略auto, int val=100;
}
局部变量和静态局部变量对比
void func()
{
for (int i = 1; i <= 100; i++)
{
int num = 0; //局部变量,每次块语句结束,就自动释放,每次的值都是0
static int data = 0; //静态局部变量,始终在内存中,一旦定义初始化,只执行一次初始化
printf("%p ,%p\n", &num, &data);
num = num + i;
data = data + i;
printf("num=%d,data=%d\n", num, data);
}
}
通过输出的结果,能更好的理解静态变量

静态全局变量和全局变量
static int xxx = 20; //静态全局变量
extern int yyy = 20; //全局变量
注意
//在同一个文件中,静态全局变量和全局变量没有区别,当加了extern的全局变量可以在所有源文件中使用
//int e_extern = 10; //编译器自动编译为 extern int e_extern = 10;
函数和静态函数
static void array_sort()
{
}
注意
//c语言的函数是跨文件的
//static可以避免函数跨文件重名,带static函数的叫静态函数(内部函数),作用域在当前c文件
静态变量的作用域
注意
在<<c语言程序语言>>一书中解释特别好,通过static声明限定外部变量与函数,可以将其后声明的对象的作用域限定为编译源文件的剩余部分.
秋风
2016-09-04