• C语言变量生存期(高阶篇三十八)


      变量的生老病死

        所有变量都占着内存,变量什么时候开始占着内存,什么时候从内存中消失,这叫做变量的生存周期。

          按照变量的生存周期分类有:

            ※自动变量auto

            ※静态变量static

            ※寄存器变量register

            ※外部变量extern

            ※函数也有外部函数extern和静态函数static两种

      变量作用域

        有时候变量还未消亡,你却不能使用它,这就是变量作用域在作怪。

        按照变量作用域分局部变量和全局变量。它们没有什么关键字修饰,只是看你在什么部位定义变量。

        从变量生存期和作用域来分析几种不同种类变量的特性。

      局部变量

        定义局部变量的关键字为auto,也叫自动变量。

        C语言规定自动变量在定义时前面的auto可以省略。

          如:int a;   等价于  auto int a;

      全局变量

        在函数外面定义的变量都是全局变量,不管它用什么关键字修饰。

        全局变量的特点:

          ※全局变量的生存期和作用域在从它的定义点开始,一直到本文件的程序结束前,都是有效的,程序结束后消亡,释放内存。

          ※全局变量作用域中的所有函数将共享这个全局变量中的内存数据,各函数之间也可以通过全局变量传送数据,但在职业程序员中,这是种很不好的习惯。

        注意:在同一作用域中,如果局部变量与全局变量重名,全局变量将暂时退居幕后,这时只能操作局部变量。

        程序1

          局部变量和全局变量

    // 38-1变量生存期.c
    
    #include <stdio.h>
    
    int a = 1, b = 2;     //全局变量
    
    void fun(int c,int d)
    {
        int a = 3, b = 4;    //局部变量与全局变量重名,隐藏全局变量
        auto int e = 5;      //自动局部变量  int e = 5; 相等
        int f = 6;    //局部变量
        printf("在fun函数中使用局部变量:c = %d\n", c);
        printf("在fun函数中使用局部变量:e = %d\n", e);
        printf("在fun函数中使用全局变量:a = %d\n", a);
    
    
    }
    
    
    int g = 10, h = 11;   //全局变量
    main()
    {
        int i = 12, j = 13;  //局部变量
        fun(i, h);
        printf("在main函数中使用全局变量:a = %d\n", a);
        printf("在main函数中使用全局变量:g = %d\n", g);
    
    }

      静态变量

        静态变量在程序执行点离开它的作用域时,它并不消亡,它还会死霸着那片内存不放,等着你别的函数下次来使用它。与全局变量不同的是:静态变量通常在函数内部定义,而全局变量只能在函数外部定义。它们的共同点是:在程序结束时,它们都会消亡。   

        程序2

          静态变量

    // 38-2静态变量static.c
    //
    
    #include <stdio.h>
    void fun()
    {
        static int i = 0;   //静态局部变量    一直占用内存区
        int a = 0;            //局部变量
        i++;
        a++;
        printf("静态变量值:i = %d\n,自动变量值:a = %d\n", i, a);
    }
    
    main()
    {
        fun();
        fun(); 
        fun();
    }

      寄存器变量

        寄存器变量不放在内存中,直接放在CPU寄存器中。因为CPU中的寄存器数量有限,所以寄存器变量不能设置太多。

        寄存器变量的特点是:比普通内存速度快上百倍。

      外部变量

        如果一个文件要使用其它文件中的全局变量,就要使用extern声明,这样它就可以和其它文件共享此变量。

  • 相关阅读:
    frp基础操作
    windowsformshost mouse event not transmit to it's parent control
    model attribute
    基于Flash模式开发视频会议
    通信业务服务器部署
    音视频开发的中心录像服务器
    音视频即时通讯开发功能介绍
    音视频和数据传输的局域网通讯
    音视频开发技术版本再升级
    音视频技术的的应急指挥通讯
  • 原文地址:https://www.cnblogs.com/httpcc/p/15564564.html
Copyright © 2020-2023  润新知