关键字 static

2018-04-02  本文已影响0人  曹小恒

1.修饰局部变量
static 修饰局部变量时, 这个变量成为静态变量, 存储在静态区, 生命周期和程序相同, 这个变量在 main 函数之前初始化,在程序退出的时候销毁.
即使在退出函数之后,这个变量也不会被销毁.

  1. 修饰全局变量
    全局变量本来就在静态区,但是 static 可以限制他的连接属性,被 static 修饰的全局变量只能被被包含该定义的文件访问. 因此可以将变量的声明和定义放在头文件中,从而被多个(非常不推荐,使用 extern更好)

  2. 修饰函数
    static 修饰的函数只能在该函数定义的文件中被调用.其定义和声明需要放在同一个文件中.

  3. 类成员修饰

初始化时不要加上static

作用

  1. 隐藏(作用域)
    修饰全局变量和函数的时候,只有在包含他们定义的地方,才能被调用,对于其他. c 文件,他们是不可见的.
  2. 确定生存周期(static 有记忆功能,仅仅初始化一次)
    全局变量和静态变量都存储在静态区,静态变量可以控制可见范围.局部变量的生存周期和整个程序相同(初始化在 main 之前,退出所在函数后不销毁,但是不能访问因为作用域的原因.)
#include <stdio.h>
 
int fun(){
    static int count = 10; //在第一次进入这个函数的时候,变量a被初始化为10!并接着自减1,以后每次进入该函数,a
    return count--; //就不会被再次初始化了,仅进行自减1的操作;在static发明前,要达到同样的功能,则只能使用全局变量:    
 
}
 
int count = 1;
 
int main(void)
{
     printf("global\t\tlocal static\n");
     for(; count <= 10; ++count)
               printf("%d\t\t%d\n", count, fun());
     return 0;
}

输出为


图片.png

结论
局部变量->静态变量: 生存期和初始化方式
全局变量->静态变量: 作用域(静态变量只能在定义的文件中可以被调用)

  1. 默认初始化为0

  2. 修饰成员函数和成员变量
    静态成员属于整个类而不是任何一个对象,只存储一份供给所有对象共享

上一篇 下一篇

猜你喜欢

热点阅读