【c 应用】static关键字总结

static关键字用的很多,但是还是不太懂,每次都要查资料。用的时候也是稀里糊涂的,只知道static是静态的,用的最多的也就是静态变量,静态函数基本是瞎用或者不用。用静态变量时,只考虑了静态变量只初始化一次的好处,没有分析过和全局变量有什么区别,今天做个总结,加深一下理解。


分为三个作用点,如下:

1、隔离作用

1.1、作用域和生命周期

借用网上的一张图来看下。

extern  全局变量声明,不是用来定义变量的。

static 修饰定义的。

【c 应用】static关键字总结_第1张图片

1.2、说明

全局变量作用域为整个程序,生命周期为整个程序运行期

添加static修饰词后,全局变量或者函数的作用域就修改了,作用域变小了,生命周期还是不变的。

这样就起到了隐藏函数或者当前文件变量的功能,放置其他文件调用。说个不负责的比喻就相当于c++中的private修饰词。

2、保留值

存储在静态数据区的变量会在程序刚开始运行时就完成初始化,也是唯一的一次初始化。可能没有感觉看下面代码:

void Init()
{
    static int stat = 0;
    
    if(stat == 1){
        return;
    }
    stat = 1;
    printf("===============init===================\n");
    
    return;
}

int main()
{
    printf("====================================start=====================================\n");
    Init();
    Init();
    Init();
    Init();
    Init();
    printf("====================================end=====================================\n");
}

如果运行上面代码你会发现“===============init===================”只会打印一次,说明初始化stat=0只执行了一次。

共有两种变量存储在静态存储区:全局变量和 static 变量,只不过和全局变量比起来,static 可以控制变量的可见范围,说到底 static 还是用来隐藏的。

3、初始化值为0

其实全局变量也具备这一属性,因为全局变量也存储在静态数据区。在静态数据区,内存中所有的字节默认值都是 0x00,某些时候这一特点可以减少程序员的工作量。

总结

1、什么时候用全局变量什么时候用static修饰变量

      1、严格来说基本上不要使用全局变量,增加代码的阅读难度,调试难度。能用局部变量解决就用局部变量。

      2、要保留值时,可以使用static修饰变量。局部变量也可以添加static来保留值,这样的好处是作用域只是{}范围内

      3、没有被本文件以外用到的全局变量和函数,应该都加上static隐藏起来。

      4、被其他文件使用到时,则可以用全局变量。

你可能感兴趣的:(Linux,c++,linux,编程语言,面试)