精华内容
下载资源
问答
  • 二是“作用域”,如上节所述,由变量所处的位置确定变量是局部变量还是全局变量,从而确定变量的作用域;三是“存储类别”,即变量在内存中的存储方式,不同的存储方式决定了变量存在的时间,即生存期。    静态...

     C语言中,每一个变量都有3个属性:一是数据类型,如intfloatchar等,它确定了变量存储长度和运算方式;二是作用域,如上节所述,由变量所处的位置确定变量是局部变量还是全局变量,从而确定变量的作用域;三是存储类别,即变量在内存中的存储方式,不同的存储方式决定了变量存在的时间,即生存期。

         

      静态存储的变量是指变量在程序执行的全过程中始终占据着大小固定的存储单元,直到程序运行结束才予以释放。而动态存储的变量是指变量的存储单元在程序运行过程中由系统动态地分配和回收,当定义它们的函数被调用时分配内存,当定义它们的函数返回时系统收回变量所占内存。在C语言中,变量在内存中的存储方式可分为两大类:静态存储和动态存储。具体包含4种:

             

      auto型存储(自动的);

                  

      extern型存储(外部的);

     

     static型存储(静态的);  

                 

      register型存储(寄存器的)。

       

    C语言对每一个变量定义的一般格式为:

        [存储类型]  [数据类型]  变量名1,变量名2……

    在定义变量时,存储类别和数据类型可以缺省一个,当存储类别缺省时,默认为auto型;当数据类型缺省时,默认为int型。

    5.7.1  自动变量(auto型)

           

    这种存储类型是C语言程序中使用最广泛的一种类型。C语言规定,函数内凡未加存储类型说明的变量均视为自动变量,也就是说自动变量可省去说明符auto。在前面各章的程序中所定义的变量凡未加存储类型说明符的都是自动变量。

           

    自动变量具有以下特点:

    1)自动变量的作用域仅限于定义该变量的个体内。在函数中定义的自动变量,只在该函数内有效。在复合语句中定义的自动变量只在该复合语句中有效。

    2)自动变量属于动态存储方式,只有在使用它,即定义该变量的函数被调用时才给它分配存储单元,开始它的生存期。函数调用结束,释放存储单元,结束生存期。因此函数调用结束之后,自动变量的值不能保留。在复合语句中定义的自动变量,在退出复合语句后也不能再使用,否则将引起错误。

    3)由于自动变量的作用域和生存期都局限于定义它的个体内(函数或复合语句内),因此不同的个体中允许使用同名的变量而不会混淆。 即使在函数内定义的自动变量也可与该函数内部的复合语句中定义的自动变量同名。

    5.7.2  外部变量(extern型)

          

    外部变量(即全局变量)是指在函数的外部定义的变量,它的作用域为从变量的定义处开始,到本程序文件的末尾,属于静态存储类别。在一个源文件中,可以通过关键字extern来扩大外部变量的作用域。

    [5-12]  利用extern扩大外部变量的作用域。

     

     int max(int xint y)

          {    int z

           

    z=(x>y)? xy

         

      return z

           }

      main( )

         {  extern ab

           

    printf("%d"max(ab))

         }

            int a=13b=14

           

    主函数中用extern声明外部变量ab,从而使它们的作用域从主函数内扩大本程序最后一行。若没有用extern声明外部变量ab的语句,那么在编译printf语句时将会出错。因为尽管在本程序最后一行定义变量ab为外部变量,但它是在printf语句后定义的,它的作用域仅局限于最后一句语句。

    5.7.3  静态变量(static型)

           

    局部变量是动态存储的变量,但是可以用存储类型说明符static将其定义为静态存储的变量。即用关键字static声明的局部变量称为静态局部变量,当系统为其分配存储单元后便一直占据,直到程序运行结束才释放所占据的内存空间。

        C语言中,一个源程序可以由一个或多个源文件(文件扩展名为c的文件)组成。如果在定义全局变量(外部变量)时,在前面再冠以static,就构成了静态的全局变量,静态全局变量的作用域只局限于定义它的源文件内,源程序中其他源文件不能使用。而一个源文件中定义的非静态全局变量(没有在前面冠以static),在源程序包含的各个源文件中都可以使用,使用时在前面加上extern

    5.7.4  寄存器变量(register型)

          

    上述各类变量使用时都存放在内存中,因此当对一个变量频繁读写时,必须要反复访问内存,从而花费大量的存取时间。为此,C语言提供了另一种变量,即寄存器变量。这种变量存放在CPU的寄存器中,使用时,不需要访问内存,而直接从寄存器中读写,这样可提高效率。寄存器变量的说明符是register。对于循环次数较多的循环控制变量及循环体内反复使用的变量均可定义为寄存器变量。因为计算机系统中寄存器的数目是非常有限的,所以决定了在C语言程序中寄存器变量的数目有一定的限制。Turbo C允许同时定义两个寄存器变量,C语言编译系统会自动地将超过限制数目的寄存器变量当作自动变量进行处理。

    5.8  内部函数和外部函数

        函数都是全局的,因为不能在函数内部定义另一个函数。但是,根据函数能否被其他源文件调用,将函数区分为内部函数和外部函数。

    5.8.1  内部函数

        如果一个函数只能被本源文件中的其他函数所调用,它称为内部函数。在定义内部函数时,在函数名和函数类型前面加static,即:

           static 类型标识符  函数名(形参表) 

    例如:static int f (int aint b)

        使用内部函数,可以使函数只局限于所在文件,如果在不同的文件中有同名的内部函数,互不干扰。如果在别的源文件中要调用这个函数f( ),则被认为是非法的。

    5.8.2  外部函数

         在定义函数时,如果冠以关键字extern,表示此函数是外部函数,外部函数在整个源程序中都有效,其定义的一般形式为:

           extern 类型说明符 函数名(形参表)

    例如:extern int f (int aint b)

    如果在定义函数时省略 extern  static,则默认为外部函数。

    C变量的存储方式-“静态存储”和“动态存储”


         变量的存储方式可分为“静态存储”和“动态存储”两种。

    静态存储变量通常是在变量定义时就分定存储单元并一直保持不变,直至整个程序结束。全局变量即属于此类存储方式。动态存储变量是在程序执行过程中,使用它时才分配存储单元,使用完毕立即释放。典型的例子是函数的形式参数,在函数定义时并不给形参分配存储单元,只是在函数被调用时,才予以分配,调用函数完毕立即释放。如果一个函数被多次调用,则反复地分配、释放形参变量的存储单元。从以上分析可知,静态存储变量是一直存在的,而动态存储变量则时而存在时而消失。我们又把这种由于变量存储方式不同而产生的特性称变量的生存期。生存期表示了变量存在的时间。生存期和作用域是从时间和空间这两个不同的角度来描述变量的特性,这两者既有联系,又有区别。一个变量究竟属于哪一种存储方式,并不能仅从其作用域来判断,还应有明确的存储类型说明。

    在C语言中,对变量的存储类型说明有以下四种:

    auto       自动变量

    register   寄存器变量

    extern 外部变量(全局变量)

    static      静态变量

    自动变量和寄存器变量属于动态存储方式,外部变量和静态变量属于静态存储方式。在介绍了变量的存储类型之后,可以知道对一个变量的说明不仅应说明其数据类型,还应说明其存储类型。因此变量说明的完整形式应为:

          存储类型说明符 数据类型说明符 变量名,变量名… ,例如:

    static int a,b;        说明a,b为静态类型变量

    auto char c1,c2; 说明c1,c2为自动字符变量

    static int a[5]={1,2,3,4,5}; 说明a为静整型数组

    extern int x,y; 说明x,y为外部整型变量

    下面分别介绍以上四种存储类型:


    一、自动变量的类型说明符为auto。
    这种存储类型是C语言程序中使用最广泛的一种类型。C语言规定,函数内凡未加存储类型说明的变量均视为自动变量, 也就是说自动变量可省去说明符auto。 在前面各章的程序中所定义的变量凡未加存储类型说明符的都是自动变量。例如:

    { int i,j,k;

    char c;

    ……

    }等价于: { auto int i,j,k;

    auto char c;

    ……

    }

    自动变量具有以下特点:

    1. 自动变量的作用域仅限于定义该变量的个体内。在函数中定义的自动变量,只在该函数内有效。在复合语句中定义的自动变量只在该复合语句中有效。 例如:

    int kv(int a)

    {

    auto int x,y;

    { auto char c;

    }

    ……

    }

    2. 自动变量属于动态存储方式,只有在使用它,即定义该变量的函数被调用时才给它分配存储单元,开始它的生存期。函数调用结束,释放存储单元,结束生存期。因此函数调用结束之后,自动变量的值不能保留。在复合语句中定义的自动变量,在退出复合语句后也不能再使用,否则将引起错误。

    3. 由于自动变量的作用域和生存期都局限于定义它的个体内( 函数或复合语句内), 因此不同的个体中允许使用同名的变量而不会混淆。即使在函数内定义的自动变量也可与该函数内部的复合语句中定义的自动变量同名。

    [例5.14]

    main()

    {

    auto int a,s=100,p=100;

    printf("\ninput a number:\n");

    scanf("%d",&a);

    if(a>0)

    {

    auto int s,p;

    s=a+a;

    p=a*a;

    printf("s=%d p=%d\n",s,p);

    }

    printf("s=%d p=%d\n",s,p);

    }

    本程序在main函数中和复合语句内两次定义了变量s,p为自动变量。按照C语言的规定,在复合语句内,应由复合语句中定义的s,p起作用,故s的值应为a+ a,p的值为a*a。退出复合语句后的s,p 应为main所定义的s,p,其值在初始化时给定,均为100。从输出结果可以分析出两个s和两个p虽变量名相同, 但却是两个不同的变量。

    4. 对构造类型的自动变量如数组等,不可作初始化赋值。


    二、外部变量的类型说明符为extern。
    外部变量的几个特点:

    1. 外部变量和全局变量是对同一类变量的两种不同角度的提法。全局变量是从它的作用域提出的,外部变量从它的存储方式提出的,表示了它的生存期。

    2. 当一个源程序由若干个源文件组成时, 在一个源文件中定义的外部变量在其它的源文件中也有效。例如有一个源程序由源文件F1.C和F2.C组成:

    F1.C

    int a,b;

    char c;

    main()

    {

    ……

    }

    F2.C

    extern int a,b;

    extern char c;

    func (int x,y)

    {

    ……

    }

    在F1.C和F2.C两个文件中都要使用a,b,c三个变量。在F1.C文件中把a,b,c都定义为外部变量。在F2.C文件中用extern把三个变量说明为外部变量,表示这些变量已在其它文件中定义,并把这些变量的类型和变量名,编译系统不再为它们分配内存空间。 对构造类型的外部变量, 如数组等可以在说明时作初始化赋值,若不赋初值,则系统自动定义它们的初值为0。


    三、静态变量
    静态变量的类型说明符是static。 静态变量当然是属于静态存储方式,但是属于静态存储方式的量不一定就是静态变量, 例如外部变量虽属于静态存储方式,但不一定是静态变量,必须由 static加以定义后才能成为静态外部变量,或称静态全局变量。 对于自动变量,前面已经介绍它属于动态存储方式。 但是也可以用static定义它为静态自动变量,或称静态局部变量,从而成为静态存储方式。

    由此看来, 一个变量可由static进行再说明,并改变其原有的存储方式。

    1. 静态局部变量

    在局部变量的说明前再加上static说明符就构成静态局部变量。

    例如:

    static int a,b;

    static float array[5]={1,2,3,4,5};

    静态局部变量属于静态存储方式,它具有以下特点:

    (1)静态局部变量在函数内定义,但不象自动变量那样,当调用时就存在,退出函数时就消失。静态局部变量始终存在着,也就是说它的生存期为整个源程序。

    (2)静态局部变量的生存期虽然为整个源程序,但是其作用域仍与自动变量相同,即只能在定义该变量的函数内使用该变量。退出该函数后,尽管该变量还继续存在,但不能使用它。

    (3)允许对构造类静态局部量赋初值。

    (4)对基本类型的静态局部变量若在说明时未赋以初值,则系统自动赋予0值。而对自动变量不赋初值,则其值是不定的。根据静态局部变量的特点,可以看出它是一种生存期为整个源程序的量。虽然离开定义它的函数后不能使用,但如再次调用定义它的函数时,它又可继续使用,而且保存了前次被调用后留下的值。因此,当多次调用一个函数且要求在调用之间保留某些变量的值时,可考虑采用静态局部变量。虽然用全局变量也可以达到上述目的,但全局变量有时会造成意外的副作用,因此仍以采用局部静态变量为宜。

    [例5.15]main()

    {

    int i;

    void f();

    for(i=1;i<=5;i++)

    f();

    }

    void f()

    {

    auto int j=0;

    ++j;

    printf("%d\n",j);

    }

    程序中定义了函数f,其中的变量j 说明为自动变量并赋予初始值为0。当main中多次调用f时,j均赋初值为0,故每次输出值均为1。现在把j改为静态局部变量,程序如下:

    main()

    {

    int i;

    void f();

    for (i=1;i<=5;i++)

    f();

    }

    void f()

    {

    static int j=0;

    ++j;

    printf("%d\n",j);

    }

    由于j为静态变量,能在每次调用后保留其值并在下一次调用时继续使用,所以输出值成为累加的结果。读者可自行分析其执行过程。

    2.静态全局变量

         全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。全局变量本身就是静态存储方式, 静态全局变量当然也是静态存储方式。 这两者在存储方式上并无不同。这两者的区别虽在于非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。而静态全局变量则限制了其作用域, 即只在定义该变量的源文件内有效,在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用,因此可以避免在其它源文件中引起错误。从以上分析可以看出,把局部变量改变为静态变量后是改变了它的存储方式即改变了它的生存期。把全局变量改变为静态变量后是改变了它的作用域,限制了它的使用范围。因此static这个说明符在不同的地方所起的作用是不同的。应予以注意。


    四、寄存器变量
    上述各类变量都存放在存储器内, 因此当对一个变量频繁读写时,必须要反复访问内存存储器,从而花费大量的存取时间。为此,C语言提供了另一种变量,即寄存器变量。这种变量存放在CPU的寄存器中,使用时,不需要访问内存,而直接从寄存器中读写,这样可提高效率。寄存器变量的说明符是register。对于循环次数较多的循环控制变量及循环体内反复使用的变量均可定义为寄存器变量。

    [例5.16]求∑200i=1imain()

    {

    register i,s=0;

    for(i=1;i<=200;i++)

    s=s+i;

    printf("s=%d\n",s);

    }

    本程序循环200次,i和s都将频繁使用,因此可定义为寄存器变量。

    对寄存器变量还要说明以下几点:

    1. 只有局部自动变量和形式参数才可以定义为寄存器变量。因为寄存器变量属于动态存储方式。凡需要采用静态存储方式的量不能定义为寄存器变量。

    2. 在Turbo C,MS C等微机上使用的C语言中,实际上是把寄存器变量当成自动变量处理的。因此速度并不能提高。而在程序中允许使用寄存器变量只是为了与标准C保持一致。3. 即使能真正使用寄存器变量的机器,由于CPU中寄存器的个数是有限的,因此使用寄存器变量的个数也是有限的。


    内部函数和外部函数

         函数一旦定义后就可被其它函数调用。 但当一个源程序由多个源文件组成时, 在一个源文件中定义的函数能否被其它源文件中的函数调用呢?为此,C语言又把函数分为两类:

    一、内部函数
    如果在一个源文件中定义的函数只能被本文件中的函数调用,而不能被同一源程序其它文件中的函数调用, 这种函数称为内部函

    数。定义内部函数的一般形式是: static 类型说明符 函数名(形参表) 例如:

    static int f(int a,int b) 内部函数也称为静态函数。但此处静态static 的含义已不是指存储方式,而是指对函数的调用范围只局限于本文件。 因此在不同的源文件中定义同名的静态函数不会引起混淆。


    二、外部函数
    外部函数在整个源程序中都有效,其定义的一般形式为: extern 类型说明符 函数名(形参表) 例如:

    extern int f(int a,int b)如在函数定义中没有说明extern或static则隐含为extern。在一个源文件的函数中调用其它源文件中定义的外部函数时,应用extern说明被调函数为外部函数。例如:

    F1.C (源文件一)

    main()

    {

    extern int f1(int i);

    ……

    }

    F2.C (源文件二)

    extern int f1(int i);

    {

    ……

    }

    展开全文
  • C语言的动态存储变量与静态存储变量     动态存储变量与静态...二是“作用域”,如上节所述,由变量所处的位置确定变量是局部变量还是全局变量,从而确定变量的作用域;三是“存储类别”,即变量在内存中的存
             

     动态存储变量与静态存储变量

        

      C语言中,每一个变量都有3个属性:一是数据类型,如intfloatchar等,它确定了变量存储长度和运算方式;二是作用域,如上节所述,由变量所处的位置确定变量是局部变量还是全局变量,从而确定变量的作用域;三是存储类别,即变量在内存中的存储方式,不同的存储方式决定了变量存在的时间,即生存期。

         

      静态存储的变量是指变量在程序执行的全过程中始终占据着大小固定的存储单元,直到程序运行结束才予以释放。而动态存储的变量是指变量的存储单元在程序运行过程中由系统动态地分配和回收,当定义它们的函数被调用时分配内存,当定义它们的函数返回时系统收回变量所占内存。在C语言中,变量在内存中的存储方式可分为两大类:静态存储和动态存储。具体包含4种:

             

     auto型存储(自动的);

                  

     extern型存储(外部的);

     

    static型存储(静态的);  

                 

     register型存储(寄存器的)。

       

    C语言对每一个变量定义的一般格式为:

        [存储类型] [数据类型]  变量名1,变量名2……

    在定义变量时,存储类别和数据类型可以缺省一个,当存储类别缺省时,默认为auto型;当数据类型缺省时,默认为int型。

    5.7.1 自动变量(auto型)

           

    这种存储类型是C语言程序中使用最广泛的一种类型。C语言规定,函数内凡未加存储类型说明的变量均视为自动变量,也就是说自动变量可省去说明符auto。在前面各章的程序中所定义的变量凡未加存储类型说明符的都是自动变量。

           

    自动变量具有以下特点:

    1)自动变量的作用域仅限于定义该变量的个体内。在函数中定义的自动变量,只在该函数内有效。在复合语句中定义的自动变量只在该复合语句中有效。

    2)自动变量属于动态存储方式,只有在使用它,即定义该变量的函数被调用时才给它分配存储单元,开始它的生存期。函数调用结束,释放存储单元,结束生存期。因此函数调用结束之后,自动变量的值不能保留。在复合语句中定义的自动变量,在退出复合语句后也不能再使用,否则将引起错误。

    3)由于自动变量的作用域和生存期都局限于定义它的个体内(函数或复合语句内),因此不同的个体中允许使用同名的变量而不会混淆。 即使在函数内定义的自动变量也可与该函数内部的复合语句中定义的自动变量同名。

    5.7.2 外部变量(extern型)

          

    外部变量(即全局变量)是指在函数的外部定义的变量,它的作用域为从变量的定义处开始,到本程序文件的末尾,属于静态存储类别。在一个源文件中,可以通过关键字extern来扩大外部变量的作用域。

    [5-12] 利用extern扩大外部变量的作用域。

     

     int max(int xint y)

          {    int z

           

    z=(x>y)? xy

         

     return z

           }

      main( )

         {  extern ab

           

    printf("%d"max(ab))

         }

            int a=13b=14

           

    主函数中用extern声明外部变量ab,从而使它们的作用域从主函数内扩大本程序最后一行。若没有用extern声明外部变量ab的语句,那么在编译printf语句时将会出错。因为尽管在本程序最后一行定义变量ab为外部变量,但它是在printf语句后定义的,它的作用域仅局限于最后一句语句。

    5.7.3 静态变量(static型)

           

    局部变量是动态存储的变量,但是可以用存储类型说明符static将其定义为静态存储的变量。即用关键字static声明的局部变量称为静态局部变量,当系统为其分配存储单元后便一直占据,直到程序运行结束才释放所占据的内存空间。

        C语言中,一个源程序可以由一个或多个源文件(文件扩展名为c的文件)组成。如果在定义全局变量(外部变量)时,在前面再冠以static,就构成了静态的全局变量,静态全局变量的作用域只局限于定义它的源文件内,源程序中其他源文件不能使用。而一个源文件中定义的非静态全局变量(没有在前面冠以static),在源程序包含的各个源文件中都可以使用,使用时在前面加上extern

    5.7.4 寄存器变量(register型)

          

    上述各类变量使用时都存放在内存中,因此当对一个变量频繁读写时,必须要反复访问内存,从而花费大量的存取时间。为此,C语言提供了另一种变量,即寄存器变量。这种变量存放在CPU的寄存器中,使用时,不需要访问内存,而直接从寄存器中读写,这样可提高效率。寄存器变量的说明符是register。对于循环次数较多的循环控制变量及循环体内反复使用的变量均可定义为寄存器变量。因为计算机系统中寄存器的数目是非常有限的,所以决定了在C语言程序中寄存器变量的数目有一定的限制。Turbo C允许同时定义两个寄存器变量,C语言编译系统会自动地将超过限制数目的寄存器变量当作自动变量进行处理。

    5.8 内部函数和外部函数

        函数都是全局的,因为不能在函数内部定义另一个函数。但是,根据函数能否被其他源文件调用,将函数区分为内部函数和外部函数。

    5.8.1 内部函数

        如果一个函数只能被本源文件中的其他函数所调用,它称为内部函数。在定义内部函数时,在函数名和函数类型前面加static,即:

           static 类型标识符 函数名(形参表) 

    例如:static int f (int aint b)

        使用内部函数,可以使函数只局限于所在文件,如果在不同的文件中有同名的内部函数,互不干扰。如果在别的源文件中要调用这个函数f( ),则被认为是非法的。

    5.8.2 外部函数

         在定义函数时,如果冠以关键字extern,表示此函数是外部函数,外部函数在整个源程序中都有效,其定义的一般形式为:

           extern 类型说明符 函数名(形参表)

    例如:extern int f (int aint b)

    如果在定义函数时省略 extern static,则默认为外部函数。

    展开全文
  • 局部变量又称内部变量,是函数内部定义的变量,作用域在定义其的函数内部; 全局变量又称外部变量,作用于是从其定义开始一直到源程序结束; 不论是全局变量还是局部变量都...全局变量局部变量是针对一给源程序而言...

    局部变量又称内部变量,是函数内部定义的变量,作用域在定义其的函数内部;
    全局变量又称外部变量,作用于是从其定义开始一直到源程序结束;

    不论是全局变量还是局部变量都是一个空间上的范围,即作用域

    相对于变量的空间范围,静态和动态变量则指一个时间上的范围,所谓静态变量就是在定义时分配固定存储单元,知道源程序结束,动态变量在程序执行过程中使用才分配,使用完毕立即释放。

    全局变量局部变量是针对一给源程序而言的,若对多个源程序来讲需要用到的是外部扩展extern

    当一给源程序需要使用其他源程序定义的变量时,则在自己的源程序中用extern声明想要使用的变量。

    注意,当扩展一给全局变量时,一般将该全局变量定义在源函数中,而不是头文件中。

    存在名字空间这种操作时,一定要注意定义变量和扩展变量要在同一名字空间下!!
    下面十一给简单的例子!

    源程序2需要调用源程序1的SSA变量:
    1.cpp:

    namespace nfd {
    int SSA;
    int F1()
    {
      SSA=1024;
      cout<<SSA;
    }
    

    2.cpp

    namespace nfd{
    extern int SSA
    namespace fw{
    int F2()
    {
    cout<<SSA;
    }
    }//fw
    }//nfd
    
    展开全文
  • 变量

    2011-10-13 15:30:19
    变量的分类:  按存储方式分为:静态变量和动态变量;按作用域分为:局部变量和全局变量。... 静态变量的类型说明符static,静态局部变量静态全局变量。 一、静态局部变量  定义:在局部变量的前

    变量的分类:

        按存储方式分为:静态变量和动态变量;按作用域分为:局部变量和全局变量。同样还需要考虑变量的生存周期是与函数同命还是与源程序同命。

        静态变量的类型说明符是static,静态局部变量和静态全局变量。

    一、静态局部变量

        定义:在局部变量的前面加上static关键字就构成静态局部变量。

    特点:

    1、在函数内部定义,变量值不会因为函数的结束而消失,生存周期是整个源程序。

    2、作用域为定义该变量的函数内部,函数退出时,变量值仍然存在,但不能被访问。

    3、在定义时未赋值的由系统赋初值0;

    二、静态全局变量

        定义:全局变量的说明之前加上static关键字修饰。

       静态全局变量和非静态全局变量的区别是非静态全局变量的作用域是整个源程序, 当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。 而静态全局变量则限制了其作用域, 即只在定义该变量的源文件内有效, 在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用, 因此可以避免在其它源文件中引起错误。

        局部变量改变为静态变量后是改变了它的存储方式即改变了它的生存期。把全局变量改变为静态变量后是改变了它的作用域, 限制了它的使用范围。

     

    展开全文
  • 其实C和C++的内存分区还是有一定区别的,但此处不作区分:1)、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2)、堆区(heap) — 一般由程序员分配释放...
  • 2020-11-08

    2020-11-08 10:51:12
    c++静态存储动态存储 常量区 常量区存储字符串字面常量和const全局变量 常量区只读存储区 不能修改值 const局部变量实际存储在栈区 const全局变量存储在常量区所以不能通过指针间接修改 const局部变量存储在栈...
  • TLS及TLS反调试

    千次阅读 2015-07-06 09:18:53
    这里只讨论TLS静态存储,T不讨论TLS动态存储,毕竟跟反调试关系不大。  TLS设计的本意,为了解决多线程程序中变量同步的问题,Thread Local Storage的缩写,意为线程本地存储。线程本身有独立于其他线程的栈...
  • const和static

    2017-08-04 09:58:21
    在C语言中: Static主要功能隐藏,对函数和变量都可用。可以在不同文件中定义相同...定义局部变量就是在一个函数体内定义,一般定义的变量,在用的时候在动态存储区开辟空间,所在函数结束时释放空间。 而用stat
  • 第一课: 数组与内存控制 ...4、所有局部变量放在栈内存中、不管基本变量还是引用类型变量  都存在在各自的栈区,但引用类型变量所引用的对象(数组和普通的java对象)  则总是存储在堆内
  • 面试积累

    2013-11-18 18:43:20
    1.在函数外声明的变量和有静态存储类型的变量会自动付初值为0,没有静态存储类型的局部变量垃圾内容(malloc和realloc动态分配的内存可能垃圾值。calloc分配的全0) 2.a[i]=i++; 这样的语句不能工作。 ...
  • 描述了整个文件的文件属性,包括文件是否可执行、是静态链接还是动态链接、入口地址、目标硬件、目标操作系统等信息 .text / .code:代码段。 .data:数据段。存储全局变量局部静态变量。 .bss:(Block
  • 2.实参可以常量、变量、表达式、函数等, 无论实参何种类型的量,在进行函数调用时,它们都必须具有确定的值, 以便把这些值传送给形参。 因此应预先用赋值,输入等办法使实参获得确定值。 3.实参和形参在数量...
  • 零起点学通C++多媒体范例教学代码

    热门讨论 2010-11-30 09:35:13
    3.5 局部变量 3.6 全局变量 3.7 总结 第4章 C4-+数据类型 4.1 变量的定义 4.2 将变量及数据存储在内存中 4.3 布尔型变量 4.4 字符型变量 4.5 wchart双字符型变量 4.6 整型概述 4.7 整型变量的定义 4.8 浮点型变量 ...
  • 3.5 局部变量 3.6 全局变量 3.7 总结 第4章 C4-+数据类型 4.1 变量的定义 4.2 将变量及数据存储在内存中 4.3 布尔型变量 4.4 字符型变量 4.5 wchart双字符型变量 4.6 整型概述 4.7 整型变量的定义 4.8 ...
  • 3.6.2 局部变量 69 3.6.2.1 寄存器变量 69 3.6.3 静态变量 70 3.6.4 外部变量 71 3.6.4.1 连接 71 3.6.5 常量 72 3.6.5.1 常量值 72 3.6.6 volatile变量 73 3.7 运算符及其使用 73 3.7.1 赋值 73 3.7.2 ...
  • 3.5 局部变量 16 3.6 全局变量 17 .第4章 c++数据类型 19 4.1 变量的定义 19 4.2 将变量及数据存储在内存中 20 4.3 布尔型变量 21 4.4 字符型变量 21 4.5 wchar_t双字节型变量 25 4.6 整型概述 26 4.7 ...
  • C规定以“\”作字符串结束标志,它是由系统自动加上的,所以字符串“a”实际上包含两个字符:‘a'和‘\',而把它赋给一个字符变量是不行的。 4.忽略了“=”与“==”的区别。 在许多高级语言中,用“=”符号作为关系...
  • ①如果线性表为无序表,则不管顺序存储结构还是链式存储结构,只能用顺序查找; ②即使有序线性表,如果采用链式存储结构,也只能用顺序查找。 1.7.2 二分法查找 二分法查找,也称拆半查找,一种高效的查找...
  • 21天学通C++ (中文第五版)

    热门讨论 2010-06-23 16:57:03
    5.6 参数是局部变量 5.6.1 全局变量 5.6.2 有关全局变量的注意事项 5.7 创建函数语句时的考虑因素 5.8 再谈函数实参 5.9 再谈返回值 5.10 默认参数 5.11 重载函数 5.12 函数特有的主题 5.12.1 内联函数 ...
  • C++程序员面试宝典

    热门讨论 2013-04-01 13:36:19
    面试题52 局部变量与嵌套的作用域 52 面试题53 变量有哪几种存储类型 53 4.4 引用 53 面试题54 什么引用 54 面试题55 如何使用const引用与非const引用 54 4.5 C与C++的联系 55 面试题56 C与C++有什么区别 55 4.6 ...
  • 1.10 同一个静态(static)函数或变量的所有声明都必须包含static存储类型吗? 35 1.11 extern在函数声明中什么意思? 35 1.12 关键字auto到底有什么用途? 36 类型定义(typedef) 36 1.13 对于用户定义类型,...
  • 1.10 同一个静态(static)函数或变量的所有声明都必须包含static存储类型吗?  1.11 extern在函数声明中什么意思? 1.12 关键字auto到底有什么用途? 类型定义(typedef)  1.13 对于用户定义类型,typedef和#...
  •  存储类型 1.10 同一个静态(static)函数或变量的所有声明都必须包含static存储类型吗? 1.11 extern在函数声明中什么意思? 1.12 关键字auto到底有什么用途? 类型定义(typedef) 1.13 对于用户定义类型,...
  • 1.10 同一个静态(static)函数或变量的所有声明都必需包含static存储类型吗? 1.11 extern在函数声明中什么意思? 1.12 关键字auto到底有什么用途? 类型定义(typedef) 1.13 对于用户定义类型,typedef和#...
  • 1.10 同一个静态(static)函数或变量的所有声明都必须包含static存储类型吗? 1.11 extern在函数声明中什么意思? 1.12 关键字auto到底有什么用途? 类型定义(typedef) 1.13 对于用户定义类型,typedef 和#define有...
  • 1.10 同一个静态(static)函数或变量的所有声明都必须包含static存储类型吗? 1.11 extern在函数声明中什么意思? 1.12 关键字auto到底有什么用途? 类型定义(typedef) 1.13 对于用户定义类型,typedef 和#define有...
  • java面试宝典

    2013-02-28 16:04:01
    123、JSP中动态INCLUDE与静态INCLUDE的区别? 31 124、两种跳转方式分别什么?有什么区别? 31 125、如何执行一个线程安全的JSP? 31 126、JSP如何处理HTML FORM中的数据? 31 127、在JSP如何包含一个静态文件? 32 128...
  • 千方百计笔试题大全

    2011-11-30 21:58:33
    123、JSP中动态INCLUDE与静态INCLUDE的区别? 31 124、两种跳转方式分别什么?有什么区别? 31 125、如何执行一个线程安全的JSP? 31 126、JSP如何处理HTML FORM中的数据? 31 127、在JSP如何包含一个静态文件? 32 ...
  • 1.10 同一个静态(static)函数或变量的所有声明都必须包含static存储类型吗? 6 1.11 extern在函数声明中什么意思? 6 1.12 关键字auto到底有什么用途? 7 类型定义(typedef) 7 1.13 对于用户定义类型,...

空空如也

空空如也

1 2 3
收藏数 60
精华内容 24
关键字:

局部变量是静态存储还是动态