现在的位置: 首页 > 综合 > 正文

浅谈C语言中的static

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

抱歉!评论已关闭.