C语言中的static 详细分析
内容来自添加链接描述
static关键字在编写程序时有的三大类用法:
1. static全局变量/静态全局变量
静态全局变量只在本文件内有效,其他文件无法访问它。静态全局变量只能被定义它的源文件中的变量或函数访问。
2. static局部变量/静态局部变量
static修饰的静态局部变量只执行一次,而且延长了局部变量的生命周期,直到程序运行结束后才释放。
static局部变量和普通局部变量有以下区别:
1)位置:静态局部变量被编译器放在全局存储区.data,所以它虽然是局部的,但是在程序的整个生命周期内存在。
2)访问权限:静态布局变量只能被其作用域内的变量或函数访问。不能被其他的函数或源文件访问。
3)值:静态局部变量如果没有被用户初始化,则编译器自动赋值为0,以后每次调用静态局部变量的时候都用上次调用后的值。每次函数调用静态局部变量的时候都修改它然后离开,下次读的时候从全局变量存储区读出的静态局部变量就是上次修改后的值。
3. static函数
当你的程序中有很多个源文件的时候,你肯定会让某个源文件只提供一些外界需要的接口,其他的函数可能是为了实现这些接口而编写,这些其他的函数你可能并不希望被外界(非本源文件)所看到,这时候就可以用static修饰这些“其他的函数”。
所以static函数的作用域是本源文件,把它想象为面向对象中的private函数就可以了。
static函数可以很好地解决不同原文件中函数同名的问题,因为一个源文件对于其他源文件中的static函数是不可见的