接下来说存储类说明符的第二个知识点——静态变量,它包括三种:全局变量/外部变量,静态全局变量,静态局部变量
非常重要!工作中必用。接近于底层的一个理解。
特点:
静态变量存储在静态区/静态全局区/静态存储区,因为内存区域分5个区:堆区,栈区,字符常量区,静态区,代码区。
这个内存区域有什么特点?我们知道栈区的特点是 :变量的申请与释放都是由操作系统帮我们管理的,而且变量的生命周期在它的作用域结束的时候,就放掉了。
静态存储区的特点:
1 静态存储区的变量/我们申请的空间 会自动初始化为0。不管是int a,你定义好了这个a之后,也不用去初始化,a里面的值就是0.你定义一个指针 int * p,p里面就是NULL. 你定义一个结构体,有多个成员,每个成员都是0.定义一个数组,数组的所有成员都被初始化为0.
2.生命周期与程序共存亡。
像栈区的局部变量,它的作用域就是这个变量所在的{}范围内,从它定义的这一行开始直到{}结束,这么一个区域。
而静态变量是与程序共存亡的,从它创建开始到软件关闭,这块空间才会释放。
3.静态存储区的静态变量在程序运行的时候,在加载资源阶段分配空间。
解释一下"加载资源阶段分配空间":一个程序执行入口是主函数,当软件一打开的时候,不会直接执行主函数的,是要加载一些资源,也就是软件要运行所必要的资源,加载到内存。
资源加载完了,软件运行的环境就相当于搭建好了,资源加载完了,开始执行主函数。
即使说静态变量定义在主函数里面了,这个变量依然是在程序加载的阶段申请空间。
全局变量 :
位置:写在全局的位置。?!
只要不在任何函数内,就叫 全局变量。
全局变量会自动初始化为0.
当然也可以手动初始化成 想要的值。
当全局变量与局部变量重名,在局部位置,局部变量有效。