静态变量

静态变量的作用域 是文件 ,只在这个文件中有效


静态局部变量

如果在某个块中,声明了某个静态变量,无论该块是否被访问,该静态变量都在内存中存在。
只有访问该块时,才能使用,Static内部变量 保存了上一次使用后的值
Static类型的内部变量是一种只能在某个特定函数中使用,但一 直占据存储空间的变量(可以通过指针 在该块的外部进行访问)
静态局部变量 只会进行一次初始化 如果最后再次调用Fun1函数 静态局部变量不会再次初始化成10

void Fun1(void);
void Fun2(void);
void Fun3(void);
int *Sp = NULL;
int *p = NULL;

int main(int argc, char* argv[])
{
	Fun1();
	Fun2();

	Fun3();
	Fun2();
	return 0;
}


void Fun1(void)
{
	static int a = 10;
	int b = 20;

	Sp = &a;
	p = &b;
}


void Fun2()
{
	printf("Sp = %d  p = %d\n",*Sp,*p);
}


void Fun3(void)
{
	*Sp = 30;
	*p = 20;
}

静态变量_第1张图片

静态全局变量

全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。
全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式。
这两者在存储方式上并无不同。

这两者的区别虽在于:
1、非静态全局变量的作用域是整个源程序 ,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。
2、静态全局变量则限制了其作用域, 即只在定义该变量的源文件 内有效,在同一源程序的其它源文件(即声明了该变量的CPP文件,或包含该变量声明头文件的CPP文件)中不能使用它。

由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用,因此可以避免在其它源文件中引起错误。

从以上分析可以看出————
把局部变量改变为静态变量后是改变了它的存储方式,即改变了它的生存期。
把全局变量改变为静态变量后是改变了它的作用域,限制了它的使用范围。

因此static这个说明符在不同的地方所起的作用是不同的。应予以注意。

关于Static关键字
1.静态变量,分配在静态存储区,在数据段中。函数退出之后,变量值不变。
2.作用域,全局的静态变量、静态函数只能在本文件中使用。(不同于一般全局变量)
局部的静态变量同函数的局部变量

你可能感兴趣的:(C语言学习,c++,c语言)