zoukankan      html  css  js  c++  java
  • 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声明,这样它就可以和其它文件共享此变量。

  • 相关阅读:
    1024X768大图 (Wallpaper)
    (Mike Lynch)Application of linear weight neural networks to recognition of hand print characters
    瞬间模糊搜索1000万基本句型的语言算法
    单核与双核的竞争 INTEL P4 670对抗820
    FlashFTP工具的自动缓存服务器目录的功能
    LDAP over SSL (LDAPS) Certificate
    Restart the domain controller in Directory Services Restore Mode Remotely
    How do I install Active Directory on my Windows Server 2003 server?
    指针与指针变量(转)
    How to enable LDAP over SSL with a thirdparty certification authority
  • 原文地址:https://www.cnblogs.com/httpcc/p/15564564.html
Copyright © 2011-2022 走看看