静态变量

静态变量

  在变量声明之前加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