• C语言中static修饰符的意义


    在C语言中,static通常有2种含义:1)定义变量的生命周期;2)定义变量或者函数的作用域。

    变量的生命周期是指,相对于程序运行的进程生命周期,变量存在的时间段。变量的生命周期由变量的存储类型(位置)决定。因此static的第1种含义也可以理解为,static定义了变量的存储类型(位置)。

    C语言中,变量存储位置分为栈、全局静态区、堆。栈用来做函数调用,参数传递等,在程序的运行过程中是操作最频繁的数据区。全局静态区,是变量一直存在于内存中,在程序整个运行过程中不会被销毁。堆,是由操作系统维护的大空间内存伸缩区,进程可以主动向操作系统申请使用堆的存储,在程序运行过程中动态申请。

    由static修饰的变量,其存储类型为全局静态区,变量在程序的整个运行过程中不会被销毁,并且只会被初始化1次。

    代码1:static修饰变量的生命周期(存储类型)

    void func1()
    {
        static int var1 = 1;        // 在全局静态区分配变量var1的存储空间
        int var2 = 1;        // 在栈上分配var2的存储空间
    
        var1 = var1+1;    
        var2 = var2+1;
    
        printf("var1=%d, var2=%d", var1, var2)
    }
    
    void main()
    {
        func1();
        func1();
        func1();
    }

    代码输出:

    “var1=2, var2=2”

    “var1=3, var2=2”

    “var1=4, var2=2”

    作用域是指变量/函数的可见区域,可被引用区域。在C语言中,不加static修饰的函数对所有的源文件都是可见的,不加static修饰的全局变量对所有的源文件都是可见的。通过static修饰,可以把函数的作用域限定在本源文件内,把全局变量的作用域限定在本源文件内。

    由于全局变量和函数的作用域是所有源文件,所有源文件引用的是同一个全局变量和函数,因此C语言不允许在2个源文件内定义相同的全局变量、函数,在代码链接阶段会提示链接错误。通过添加static修饰,可以让2个源文件定义相同的全局变量和函数,但是注意这2个源文件引用的全局变量和函数是独立的。

    static常见使用场合

    static int var1 = 1;       // 限定全局变量var1仅在本源文件可见
    static void func1()        // 限定函数仅在本源文件可见
    {
        static int var2 =1;     // var2是静态变量,不是栈变量,只被初始化一次
    }       
    
    void main()
    {
        func1();
    }
  • 相关阅读:
    Devexpress Gridview 自定义汇总CustomSummaryCalculate(加权平均)
    JavaScript(1)
    Opencv基本数据类型
    1.2OpenCV如何扫描图像,利用查找表和计时
    读取,修改,保存图像
    Opencv(3):基本数据类型
    OpenCV(2):视频
    OpenCV(1):显示图像
    IPython:一种交互式计算和开发环境(魔术命令,快捷键)
    IPython:一种交互式计算和开发环境
  • 原文地址:https://www.cnblogs.com/yuqiao/p/5801482.html
Copyright © 2020-2023  润新知