主要特点:
- static 修饰一个函数,则这个函数的只能在本文件中调用,不能被其他文件调用。static 修饰的变量存放在全局数据区的静态变量区,包括全局静态变量和局部静态变量,都在全局数据区分配内存。初始化的时候自动初始化为 0。
- 普通局部变量存储于进程栈空间,使用完毕会立即释放,不想被释放的时候,可以使用static修饰,定义的变量不会随着函数调用结束而释放。
- 静态变量在全局数据区分配内存,全局数据区的数据并不会因为函数的退出而释放空间。
- 考虑到数据安全性,当程序想要使用全局变量的时候应该先考虑使用 static。
局部静态变量:
- 静态局部变量在程序执行到该对象的声明处时被首次初始化,且只初始化一次,以后的函数调用不再进行初始化。
- 直到程序(不是所在函数)结束才会释放,延长了局部变量的生命周期。
- 其作用域为局部作用域,当定义它的函数或语句块结束时,其作用域随之结束。
- 同一文件下不同函数可以定义同名局部变 量及局部静态变量。
全局静态变量:
- 未经初始化的静态全局变量会被程序自动初始化为0,在函数体外被声明的自动变量也会被初始化为 0。
- 全局变量是不显式用 static 修饰的全局变量,默认是有外部链接性的,作用域是整个工程,在一个文件内定义的全局变量,在另一个文件中,通过 extern 全局变量名的声明,就可以使用该全局变量。全局静态变量是显式用 static 修饰的全局变量,作用域是声明此变量所在的文件,其他的文件即使用 extern 声明也不能使用。