在C语言中,static 不仅可以用来修饰变量,还可以用来修饰函数,使用 static 修饰的变量, 称为静态变量。
一、static修饰局部变量——静态局部变量
结论:static 修饰局部变量改变了变量的生命周期,让静态局部变量出了作用 域依然存在,到程序结束,生命周期才结束。
static 本质上是改变了变量的存储类型,从栈区到了静态区。
(拓展:内存被划分为三个区域:
1.栈区:存放 局部变量、函数的参数等局部的、临时的变量
2.堆区:动态内存分配的
3.静态区:全局变量、static修饰的静态变量)
二、static修饰全局变量——静态全局变量
结论:一个全局变量被static修饰,使得这个全局变量只能在本源文件内使用,不能在其他源文件中使用。(同一个项目中的其他源文件内都不可使用)
全局变量,在其他源文件内部可以被使用,是因为全局变量具有外部链接属性,但是被static修饰之后,就变成了内部链接属性,其他源文件就不能链接到这个静态的全局变量了。
三、static修饰函数——静态函数
总结:一个函数被static修饰,使得这个函数只能在本源文件内使用,不能在其他源文件内使用。
本质:static是将函数的外部链接属性变成了内部链接属性,和static修饰全局变量一样。