精华内容
下载资源
问答
  • 静态全局变量
    2021-01-22 09:48:32

    静态全局变量和全局变量的区别

     

    定义:

    静态全局变量:一般全局变量前缀static关键字。

    存储方式:

    全局变量本身就是静态存储方式, 静态全局变量当然也是静态存储方式。 这两者在存储方式上并无不同。所谓静态存储方式是指在程序运行开始时由系统分配固定的储存空间的方式。

    区别

    非静态全局变量的作用域是整个源程序, 当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。

    静态全局变量则限制了其作用域, 即只在定义该变量的源文件内有效, 在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用, 因此可以避免在其它源文件中引起错误。

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

    更多相关内容
  • 1、局部变量能否和全局变量重名?  答:能,局部会屏蔽全局。要用全局变量,需要使用 ":: "  局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。对于有些编译器...

    1、局部变量能否和全局变量重名?   

      答:能,局部会屏蔽全局。要用全局变量,需要使用 ":: " 

        局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。对于有些编译器而言,在同一个函数内可以定义多个同名的局部变量,比如在两个循环体内都定义一个同名的局部变量,而那个局部变量的作用域就在那个循环体内。 

    2、如何引用一个已经定义过的全局变量?   

      答:可以用引用头文件的方式,也可以用extern关键字,如果用引用头文件方式来引用某个在头文件中声明的全局变量,假定你将那个变量写错了,那么在编译期间会报错,如果你用extern方式引用时,假定你犯了同样的错误,那么在编译期间不会报错,而在连接期间报错。 


    3、全局变量可不可以定义在可被多个.C文件包含的头文件中?为什么?  

      答:可以,在不同的C文件中以static形式来声明同名全局变量。前提是只能有一个C文件中对此变量赋初值,连接才不会出错 

     

    4、语句for( ;1 ;)有什么问题?它是什么意思?  

      答:和while(1)相同。 


    5、do……while和while……do有什么区别?   

      答:前一个循环一遍再判断,后一个判断以后再循环   

    6、请写出下列代码的输出内容   

    #include <stdio.h>     
    main()     
    {      
    int a,b,c,d;      
    a=10;   
    b=a++;    
    c=++a;    
    d=10*a++;   
    printf( "b,c,d:%d,%d,%d",b,c,d);   
    return 0;   
    } 

     

     答:10,12,120 


    7、static全局变量与普通的全局变量有什么区别?static局部变量和普通局部变量有什么区别?static函数与普通函数有什么区别? 

    答:static全局变量与普通的全局变量有什么区别:static全局变量只初使化一次,防止在其他文件单元中被引用;

           static局部变量和普通局部变量有什么区别:static局部变量只被初始化一次,下一次依据上一次结果值;

           static函数与普通函数有什么区别:static函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝

     

    (1)用static定义的全局变量,构成静态的全局变量,若是一个源程序由多个源文件组成,一般的全局变量在各个源文件中都是有效的,而用static修饰的全局变量只在定义该变量的源文件中是有效的,因此static限制了全局变量的作用范围。
    (2)普通局部变量在所在的函数每次调用的时候都会被重新分配存储空间,函数结束后,就会回收该存储空间。而用static修饰的局部变量不会,它的值始终保持着。
    (3)static函数与普通函数作用域不同,它仅作用于定义它的源文件中。

    (4)储存方式:程序的局部变量存在于(堆栈)中,全局变量存在于(静态区/全局区)中,动态申请(new)数据存在于(堆)中。

      

    8.对于一个频繁使用的短小函数,在C语言中应用什么实现,在C++中应用什么实现?


    c用宏定义,  #define S(a,b) a*b

    c++用inline  

    引入内联函数的目的是为了解决程序中函数调用的效率问题。内联函数是指用inline关键字修饰的函数。任何在类的说明部分定义的

    函数都会被自动的认为是内联函数。

    它与一般函数所不同之处只在于函数调用的处理。

    内联函数必须是和函数体声明在一起才有效。像这样的申明Inline Tablefunction(int I)是没有效果的,编译器只是把函数作为普通的函数声明,

    我们必须定义函数体。

    Inline tablefunction(int I) {return I*I};  这样我们才算定义了一个内联函数。我们可以把它作为一般的函数一样调用。

    但是执行速度确比一般函数的执行速度要快。

    (C#有无内联函数:C#就没有头文件,哪来的内联外联?要说内联,应该全都是内联,因为所有函数什么的都定义在一个文件里。存在内联函数,但要注意,在何处内联代码的决定完全由CLR做出,我们无法使用像C++中inline这样的关键字来控制那些方法是内联的。)

     

     

    全局变量、局部变量、静态全局变量、静态局部变量的区别

    C++变量根据定义的位置的不同的生命周期,具有不同的作用域,作用域可分为6种:全局作用域,局部作用域,语句作用域,类作用域,命名空间作用域和文件作用域。

    从作用域看:

    全局变量具有全局作用域。全局变量只需在一个源文件中定义,就可以作用于所有的源文件。当然,其他不包含全局变量定义的源文件需要用extern 关键字再次声明这个全局变量。

    静态局部变量具有局部作用域,它只被初始化一次,自从第一次被初始化直到程序运行结束都一直存在,它和全局变量的区别在于全局变量对所有的函数都是可见的,而静态局部变量只对定义自己的函数体始终可见。

    局部变量也只有局部作用域,它是自动对象(auto),它在程序运行期间不是一直存在,而是只在函数执行期间存在,函数的一次调用执行结束后,变量被撤销,其所占用的内存也被收回。

    静态全局变量也具有全局作用域,它与全局变量的区别在于如果程序包含多个文件的话,它作用于定义它的文件里,不能作用到其它文件里,即被static关键字修饰过的变量具有文件作用域。这样即使两个不同的源文件都定义了相同名字的静态全局变量,它们也是不同的变量。

    从分配内存空间看:
    全局变量,静态局部变量,静态全局变量都在静态存储区分配空间,而局部变量在栈里分配空间

     

     

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

        1)、静态变量会被放在程序的静态数据存储区(数据段)(全局可见)中,这样可以在下一次调用的时候还可以保持原来的赋值。这一点是它与堆栈变量和堆变量的区别。
      2)、变量用static告知编译器,自己仅仅在变量的作用范围内可见。这一点是它与全局变量的区别。

    从以上分析可以看出, 把局部变量改变为静态变量后是改变了它的存储方式即改变了它的生存期。把全局变量改变为静态变量后是改变了它的作用域,限制了它的使用范围。因此static 这个说明符在不同的地方所起的作用是不同的。应予以注意。

    Tips:
      A.若全局变量仅在单个C文件中访问,则可以将这个变量修改为静态全局变量,以降低模块间的耦合度;
      B.若全局变量仅由单个函数访问,则可以将这个变量改为该函数的静态局部变量,以降低模块间的耦合度;
      C.设计和使用访问动态全局变量、静态全局变量、静态局部变量的函数时,需要考虑重入问题,因为他们都放在静态数据存储区,全局可见;
        D.如果我们需要一个可重入的函数,那么,我们一定要避免函数中使用static变量(这样的函数被称为:带“内部存储器”功能的的函数)
        E.函数中必须要使用static变量情况:比如当某函数的返回值为指针类型时,则必须是static的局部变量的地址作为返回值,若为auto类型,则返回为错指针。

    -----------------------------------------------------------------------------------------------------------

    static 全局变量:改变作用范围,不改变存储位置

    static 局部变量:改变存储位置,不改变作用范围

    静态函数 :在函数的返回类型前加上static关键字,函数即被定义为静态函数。静态函数与普通函数不同,它只能在声明它的文件当中可见,不能被其它文件使用。

                    如果在一个源文件中定义的函数,只能被本文件中的函数调用,而不能被同一程序其它文件中的函数调用,这种函数也称为内部函数。定义一个内部函数,只需在函数类型前再加一个“static”关键字即可。

     

     

    参考:

    https://www.cnblogs.com/burandanxin/archive/2009/10/16/1584735.html

    https://blog.csdn.net/Zhanganliu/article/details/79185251

    展开全文
  • 全局变量、局部变量、静态全局变量、静态局部变量的区别
  • C++全局变量

    1、C++全局变量一般指extern全局变量,作用域:多个文件

    使用方式:.h声明全局变量 extern int a;

                       对应.cpp文件定义全局变量 int a=1;

                     其他cpp文件使用全局变量

     

    if (theGlobal.m_dCurSpeed > 0)
    		{  
    			static int ncount = 0;
    			if (ncount != 0)
    			{
    				//if (m_dTolhvHeight[0] == CProcess::sl_Encoder[0] && CProcess::sl_Encoder[0] != 0)
    				if (m_dTolhvHeight[0] == sl_Encoder[0] && sl_Encoder[0] != 0)
    				{
    					CString strException;
    					strException.Format("相机1掉线,请检查相机");
    					theGlobal.m_Log.Exception(strException);
    					theGlobal.m_Upload.COMSend110(strException);
    				}
    				//if (m_dTolhvHeight[1] == CProcess::sl_Encoder[1] && CProcess::sl_Encoder[1] != 0)
    				if (m_dTolhvHeight[1] == sl_Encoder[1] && sl_Encoder[1] != 0)
    				{
    					CString strException;
    					strException.Format("相机2掉线,请检查相机");
    					theGlobal.m_Log.Exception(strException);
    					theGlobal.m_Upload.COMSend110(strException);
    
    				}
    			}
    			ncount++;
    			//m_dTolhvHeight[0] = CProcess::sl_Encoder[0];
    			//m_dTolhvHeight[1] = CProcess::sl_Encoder[1];
    			m_dTolhvHeight[0] = sl_Encoder[0];
    			m_dTolhvHeight[1] = sl_Encoder[1];
    		}

     

    2、不加修饰符的全局变量

    在以上.h文件声明全局变量删除extern 修饰符后,使用全局变量处会提示语法错误——未声明的表示符,需要在使用全局变量的文件种添加头文件 include “XXX.h;由此可见,不加修饰符的全局变量作用域是声明全局变量的文件

    若此时编译则会提示重定义全局变量,这是因为多次引用 定义全局变量的头文件, 将会重复定义全局变量

    3、static全局变量,静态全局变量——限制全局变量只能在一个文件中使用,

                                                            作用域:同不加修饰的全局变量

    如果整个工程有多个(不加修饰的)全局变量,不允许其他文件中定义同样名字的全局变量,链接的时候会失败,全局变量使用static修饰后,便可在多个文件下定义同名的全局变量。

    展开全文
  •  //静态全局变量int add(int a,int b){ static int tempSum = 0; //静态局部变量 tempSum = tempSum + a + b; return tempSum;}int main(void){ printf("num1=%d,num2=%d\n",num1,num2); int...

    来源:公众号【编程珠玑】

    作者:守望先生

    
     

    前言

    这些是编程语言中的基本概念,如果你还不是非常明确地清楚标题的问题,并且不知道作用域,链接属性,存储期等概念的具体含义,那么本文你不该错过。为了更加清晰的理解我们的问题,需要先了解三个概念:作用域,链接属性,存储期。

    作用域

    C语言中,作用域用来描述标识符能够被哪些区域访问。

    而常见作用域有以下几种:

    为了便于说明,我们来看一个例子,就很容易理解了:

    /****************************作者:守望先生来源:公众号编程珠玑个人博客:https://www.yanbinghu.com***************************************/#include <stdio.h>int num1 = 222;         //定位在函数外,具有文件作用域static int num2 = 111;  //定义在函数外,具有文件作用域int swap(int *a,int *b); //这里的a,b是函数原型作用域int swap(int *a,int *b){    if(NULL== a || NULL == b)        goto error;        else    {        int temp = *a;  //定义在函数内,块作用域        *a = *b;        *b = temp;        return 0;    }    //printf("temp is %d\n",temp);   //因为temp具有块作用域,因此在这里不能直接使用    error://goto语句的标签,函数作用域,因此在前面就可以引用        {            printf("input para is NULL\n");            return -1;        }}int main(void){    printf("num1=%d,num2=%d\n",num1,num2);    swap(&num1,&num2);  //num1 num2具有文件作用域,可以在main函数中直接使用    printf("num1=%d,num2=%d",num1,num2);    return 0;}
    #include <stdio.h>
    int num1 = 222;         //定位在函数外,具有文件作用域
    static int num2 = 111;  //定义在函数外,具有文件作用域
    int swap(int *a,int *b)//这里的a,b是函数原型作用域
    int swap(int *a,int *b)
    {
        if(NULL== a || NULL == b)
            goto error;    
        else
        {
            int temp = *a;  //定义在函数内,块作用域
            *a = *b;
            *b = temp;
            return 0;
        }
        //printf("temp is %d\n",temp);   //因为temp具有块作用域,因此在这里不能直接使用
        error://goto语句的标签,函数作用域,因此在前面就可以引用
            {
                printf("input para is NULL\n");
                return -1;
            }
    }
    int main(void)
    {
        printf("num1=%d,num2=%d\n",num1,num2);
        swap(&num1,&num2);  //num1 num2具有文件作用域,可以在main函数中直接使用
        printf("num1=%d,num2=%d",num1,num2);
        return 0;
    }

    可以看到,error标签具有函数作用域,整个函数内都可见,而temp具有块作用域,因此在大括号外部,不能直接使用它。而num1和num2具有文件作用域,因此main函数可以直接使用它。

    链接属性

    在《hello程序是如何变成可执行文件的》我们说到了编译的过程,最后一个步骤就是链接。链接属性决定了在不同作用域的同名标识符能否绑定到同一个对象或者函数。或者说,不同作用域的标识符在编译后是否是同一个实体。

    c变量有三种链接属性:

    再稍作解释,没有static修饰,且具有文件作用域的变量,他们在链接时,多个同名标识符的变量最终都绑定到同一个实体。而static修饰的具有文件作用域的变量就不一样了,不同文件内,即便标识符名字相同,它们也绑定到了不同的实体。

    因此,如果我们希望某个变量或函数只在某一个文件使用,那么使用static修饰是一个很好的做法。

    同样的,来看一个例子。

    /****************************作者:守望先生来源:公众号编程珠玑个人博客:https://www.yanbinghu.com***************************************/#include <stdio.h>int a = 5;   //文件作用域,外部链接属性,其他文件可通过extern int a的方式使用该文件的astatic b = 6;  //文件作用域,内部链接属性,即便其他文件也有同名标识符,它们也是不同的int main(void){    int sum = 0 ; //无链接属性    sum = a + b;    printf("sum is %d\n",sum);    return 0;}
    #include <stdio.h>
    int a = 5;   //文件作用域,外部链接属性,其他文件可通过extern int a的方式使用该文件的a
    static b = 6;  //文件作用域,内部链接属性,即便其他文件也有同名标识符,它们也是不同的
    int main(void)
    {
        int sum = 0 ; //无链接属性
        sum = a + b;
        printf("sum is %d\n",sum);
        return 0;
    }

    从代码中可以看到,a和b都具有文件作用域,a具有外部链接属性,而b具有内部链接属性,sum具有块作用域,因此无链接属性。

    存储期

    实际上作用域和链接属性都描述了标识符的可见性,而存储期则描述了这些标识符对应的对象的生存期。存储期,也分下面几种:

    关于初始化,可参考《C语言入坑指南-被遗忘的初始化》。
    同样地,我们通过下面的代码来更好地理解存储期:

    /****************************作者:守望先生来源:公众号编程珠玑个人博客:https://www.yanbinghu.com***************************************/#include <stdio.h>int num1 = 222;         //静态存储期static int num2 = 111;  //静态存储期int add(int a,int b){    static int tempSum = 0;  //静态存储期    tempSum = tempSum + a + b;    return tempSum;}int main(void){    printf("num1=%d,num2=%d\n",num1,num2);    int sum = 0;  //自动存储期    sum = add(num1,num2);    printf("first time sum=%d\n",sum);//sum = 333    sum = add(num1,num2);    printf("second time sum=%d\n",sum); //sum = 666    return 0;}
    #include <stdio.h>
    int num1 = 222;         //静态存储期
    static int num2 = 111;  //静态存储期
    int add(int a,int b)
    {
        static int tempSum = 0;  //静态存储期
        tempSum = tempSum + a + b;
        return tempSum;
    }
    int main(void)
    {
        printf("num1=%d,num2=%d\n",num1,num2);
        int sum = 0;  //自动存储期
        sum = add(num1,num2);
        printf("first time sum=%d\n",sum);//sum = 333
        sum = add(num1,num2);
        printf("second time sum=%d\n",sum); //sum = 666
        return 0;
    }

    另外,如果我们通过nm命令查看编译出来的程序文件的符号表,我们可以找到num1,num2,tempSum,而没有sum,前者所用的内存数量在编译时就确定了。关于nm命令的使用可以参考《linux常用命令-开发调试篇》。

    $ gcc -g -o lifetime lifetime.c $ nm lifetime|grep num10000000000601038 D num1$ nm lifetime|grep num2000000000060103c d num2$ nm lifetime|grep tempSum0000000000601044 b tempSum.2289$ nm lifetime|grep sum$|grep num1
    0000000000601038 D num1
    $ nm lifetime|
    grep num2
    000000000060103c d num2
    $ nm lifetime|grep tempSum
    0000000000601044 b tempSum.2289
    $ nm lifetime|
    grep sum
    $

    什么全局变量,局部变量,静态局部变量,静态全局变量

    到这里,我们就可以很容易区分上面的变量类型了。实际上这里只是换了一种说法:
    全局:具有文件作用域的变量
    静态:具有静态存储期或内部链接属性
    局部:具有函数或块作用域的变量

    因而结合起来,也就很好理解了。

    当然,这仅仅是为了区分它们,这并不是它们的严格定义。更好的方法,是通过代码来理解:

    #include <stdio.h>int num1 = 222;         //全局变量static int num2 = 111;  //静态全局变量int add(int a,int b){    static int tempSum = 0;  //静态局部变量    tempSum = tempSum + a + b;    return tempSum;}int main(void){    printf("num1=%d,num2=%d\n",num1,num2);    int sum = 0;  //局部变量    sum = add(num1,num2);    printf("first time sum=%d\n",sum);//sum = 333    return 0;}
    int num1 = 222;         //全局变量
    static int num2 = 111;  //静态全局变量
    int add(int a,int b)
    {
        static int tempSum = 0;  //静态局部变量
        tempSum = tempSum + a + b;
        return tempSum;
    }
    int main(void)
    {
        printf("num1=%d,num2=%d\n",num1,num2);
        int sum = 0;  //局部变量
        sum = add(num1,num2);
        printf("first time sum=%d\n",sum);//sum = 333
        return 0;
    }

    总结

    本文总结如下:

    参考

    https://en.wikipedia.org/wiki/Global_variables

    https://en.wikipedia.org/wiki/Local_variable

    《C11标准文档》


    关注公众号【编程珠玑】,获取更多Linux/C/C++/Python/Go/算法/工具等原创技术文章。后台免费获取经典电子书和视频资源

    640?wx_fmt=jpeg

    展开全文
  • 全局变量的使用方法 参考链接:https://www.cnblogs.com/Dageking/p/3185230.htmlhttps://blog.csdn.net/hi_baymax/article/details/82425457 强烈建议使用xxx.h和xxx.cpp的形式创建全局变量和全局函数。.h和....
  • 静态全局变量

    千次阅读 2018-05-12 13:59:27
    通常情况下,静态全局变量的声明和定义放在源文件中,并且不能使用extern关键字将静态全局变量导出,因此静态全局变量的作用域仅限于定义静态全局变量所在的文件内部。 普通全局变量的作用域是整个工程,在头文件...
  • static全局变量与普通的全局变量有什么区别 ?2. static局部变量和普通局部变量有什么区别 ?3. static函数与普通函数有什么区别? 首先我们要知道两个概念:生命周期与作用域。 生命周期与作用域 生存周期: 变量...
  • 按存储区域分:全局变量、静态全局变量和静态局部变量都存放在内存的全局数据区,局部变量存放在内存的栈区 按作用域分: 1、全局变量在整个工程文件内都有效; 2、静态全局变量只在定义它的文件内有效; 3、静态...
  • 最容易想到的方法是定义为全局的变量,但定义一个全局变量有许多缺点,最明显的缺点是破坏了此变量的访问范围,使得在此函数中定义的变量,不仅仅只受此函数控制。 static关键字可以使变量的访问范围控制在函数内...
  • 全局变量和静态全局变量

    万次阅读 多人点赞 2019-04-15 00:01:34
    这两者在存储方式上并无不同,区别在于非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。而静态全局变量则限制了其作用域,即只在定义该变量的...
  • 静态局部变量具有局部作用域,它只被初始化一次,自从第一次被初始化直到程序运行结束都一直存在,它和全局变量的区别在于全局变量对所有的函数都是可见的,而静态局部变量只对定义自己的函数体始终可见。...
  • 搞懂全局变量、外部变量、静态全局变量的区别

    千次阅读 多人点赞 2020-11-17 20:50:11
    搞懂全局变量、外部变量、静态全局变量的区别全局变量外部变量静态全局变量 全局变量 全局变量是在函数的外部定义的,它的作用域为从变量定义处开始,到本程序文件的末尾。 如果外部变量不在文件的开头定义,其...
  • 静态局部变量、静态全局变量、静态函数(静态局部变量只被初始化一次,保留变量值、静态全局变量是加了作用域的全局变量、静态函数亦是加了作用域的函数)
  • Java静态全局变量与全局变量的区别

    千次阅读 2019-01-16 09:58:55
    全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式。 这两者在存储方式上并无不同。这两者的区别在于非静态全局变量的作用域是整个源程序,当一个源程序由多个原文件组成时,非静态的全局变量在各个...
  • 数据段:数据段存的是数,像全局变量就是存在数据段的 代码段:存的是程序代码,一般是只读的。 栈(stack):先进后出。C语言中局部变量就分配在栈中。   局部变量  普通的局部变量定义的时候直接定义或者在...
  • 按存储区域分:全局变量、静态全局变量和静态局部变量都存放在内存的全局数据区,局部变量存放在内存的栈区 按作用域分:   1、全局变量在整个工程文件内都有效; 2、静态全局变量只在定义它的文件内有效; ...
  • 变量可以分为:全局变量、静态全局变量、静态局部变量和局部变量。 按存储区域分,全局变量、静态全局变量和静态局部变量都存放在内存的静态 存储区域,局部变量存放在内存的栈区。 按作用域分,全局变量在整个...
  • 项目 Value Value Value Value 普通局部变量 ...不初始化内容随机 只在定义的复合语句中有效 ...能被当前源文件或其他...静态全局变量 存在全局区 不初始化内容为0 整个进程结束空间释放 只能在当前源文件中使用 ...
  • 全局变量 & 静态全局变量

    千次阅读 2019-06-19 14:53:33
    全局变量作用范围:从全局变量定义的位置到本文件结束,如果想在别的文件中访问可以...静态全局变量就是用来解决重名问题的,使用静态全局变量就是告诉编译器这个变量只在当前文件使用,在别的文件中就不可以使用。 ...
  • 局部变量在函数的开头定义在函数内的符合语句内定义作用范围在包含该局部变量的函数内有效一个函数内部,可以在复合函数语句中定义变量,这些变量只在本复合语句中有效,这种符合语句称为分程序或程序块 #include<...
  • 静态全局变量的声明与定义

    万次阅读 2018-09-07 11:11:36
    static: 用static修饰的变量,在其所...1:在一个函数内部:说明是一个静态局部变量, 不管这个函数被调用多少次,这个static修饰的变量只会有一分内存,也就是说当这个变量多次被修改,都是在上一次基础上修改,...
  • 这两者的区别虽在于非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。而静态全局变量则限制了其作用域,即只在定义该变量的源文件内
  • 全局静态变量是显式用static修饰的全局变量,作用域是声明此变量所在的文件,其他的文件即使用extern声明也不能使用。 拓展资料 全局变量也称为外部变量,它是在 函数外部定义的变量。 它不属于哪一...
  • 全局变量与静态全局变量的区别

    千次阅读 2018-08-08 22:05:32
    一·全局变量作用域是整个工程,在一个文件内定义的全局...二·静态全局变量是显式用static修饰的全局变量,作用域是声明此变量所在的文件,其他的文件即使用extern声明也不能使用。 这是extern声明全局变量的用法...
  • 1.C++变量根据定义的位置的不同的生命周期,具有不同的作用域,作用域可分为6种: ...当然,其他不包含全局变量定义的源文件需要用extern 关键字再次声明这个全局变量。 2>局部变量也只有局部作用域,它是自动对象(a
  • 还有对全局变量是不是也是编译赋初值?没有初值是不是自动给它赋值(网上好像有这么讲的),那什么时候在内存开辟空间呢(这个图上的生存期从main函数就开始)? 这些可能涉及计算机组成原理,我没学过,希望哪位...
  • 静态全局变量 作用域仅限于变量被定义的文件中,其他文件即使用 extern 声明也没法 使用他。准确地说作用域是从定义之处开始,到文件结尾处结束,在定义之处前面的那些 代码行也不能使用它。想要使用就得在前面再...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 400,114
精华内容 160,045
关键字:

静态全局变量