static 静态 全局 静态
用来修饰变量的
-
static 修饰全局变量,修改的是该全局变量的属性(【外部链接】变成【内部链接】)
-
static 修饰局部变量,修改的是局部变量的时候,修改的是存储位置(【栈存储区】变成【静态存储区】)
用法:
-
修饰局部变量
static 修饰局部变量的时候,局部变量出了作用域,也是不销毁的,存储空间并未被释放。
*本质上,static修饰局部变量的时候,改变了变量的存储位置
static修饰局部变量的时候,将原本应该存放在“栈存储区”的局部变量改成了“静态存储区”,使它的存储周期和全局变量的存储周期一样长。
位置的改变,直接影响了生命周期,使这个变长了,和程序的生命周期一样长。程序结束时,空间才会被释放
变量一旦被创建好了,是不会再次换位置的了。
区域 类型 特点 / 作用 栈区 局部变量 进入作用域时创建变量或对象,出去作用域就销毁变量或者对象,空间被释放 堆区 全局变量 用来动态内存管理的 静态区 静态变量 进入作用域创建,出去作用域也不销毁,直到程序结束内存空间才会被释放 - eg:static+局部变量 .h 头文件 ( 函数的声明, 类型的声明, 头文件的包含 )
.c 源文件 ( 函数实现 )
-
修饰全局变量
static 修饰全局变量的时候,并为对其作用域进行修改,而是改变了其属性,即将原来的外部链接属性改为内部链接属性。
在函数内定义的变量是局部变量,而在函数之外定义的变量则称为外部变量,外部变量也就是我们所讲的全局变量。 (外部变量、全局变量)的存储方式为静态存储,其生存周期为整个程序的生存周期。
全局变量可以为本文件中的其他函数所共用,它的有效范围为从定义变量的位置开始到本源文件结束。
全局变量是在整个工程内都可以使用,在 a.c 中定义的也可在 b.c 中通过exert来使用 a.c 中的全局变量(不用exert也可以)
总结:
-
static 修饰全局变量:将【外部链接】属性修改成【内部链接】属性 - (a 文件中被 static 修饰的全局变量就没法被 b 文件访问了)
-
static 修饰局部变量:存储位置由【栈存储区】修改成【静态存储区】 - (被 static 修饰的局部变量在大括号结束的时候不会被释放空间,但是括号外也无法访问该局部变量, 等到下一次进入该大括号内时,依然可以继续上次的值)
-