浅谈C语言中的static
2013年06月24日
⁄ 综合
⁄ 共 712字 ⁄ 字号
小 中 大
- 全局静态变量 :在全局变量之前加上关键字static
-
- 内存中的位置:静态存储区(静态存储区在整个程序运行期间都存在)
- 初始化: 未经初始化的全局静态变量会被程序自动初始化为0(自动对象的值是任意的,除非他被显示初始化)
- 作用域:全局静态变量在声明他的文件之外是不可见的。准确的讲是从定义之处开始到文件末尾
- 好处:
-
- 不会被其他文件所访问,修改
- 其他文件中可以使用相同名字的变量,不会发生冲突
- 局部静态变量:在局部变量之前加上关键字static
- 内存中的位置:静态存储区(静态存储区在整个程序运行期间都存在)
- 初始化: 未经初始化的全局静态变量会被程序自动初始化为0(自动对象的值是任意的,除非他被显示初始化)
- 作用域:仍为局部作用域,当定义它的函数或者语句块结束时,作用域随之结束
- 注:当static用来修饰局部变量的时候,它就改变了局部变量的存储位置,从原来的栈中存放改为静态存储区。但是局部静态变量在离开作用域之后,并没有被销毁,而是仍然驻留在内存当中,直到程序结束,只不过我们不能再对他进行访问
- 统计次数
- 这点可以在创建一个计数器时使用, 声明函数的一个局部变量,并设为static类型,作为一个计数器
- 这样函数每次被调用的时候就可以进行计数
- int count() { static int num; return num++; }
- 好处:
- 静态函数:在函数的返回类型前加上关键字static
-
- 函数的定义和声明默认情况下是extern的
- 静态函数在声明它的文件中可见,不能被其他文件使用
- 静态函数会被自动分配在一个一直使用的存储区,直到退出应用程序实例,避免了调用函数时压栈出栈,速度快很多。
-
- 其他文件中可以定义相同名字的函数,不会发生冲突
- 静态函数不能被其他文件所用