精华内容
下载资源
问答
  • 局部变量

    千次阅读 2020-09-07 12:22:00
    局部变量就是定义在大括号{ }包含的代码块内,例如: if(){ } if(){ }else{} for(){ } while() { } do{ } while(); switch(){ } 还有函数的定义,例如: voidfunc(void){ } 在大括号{}包含的代码块内定义的...

    C语言提供了局部变量的定义,局部变量也称为:内部变量。局部变量就是定义在大括号{ }包含的代码块内,例如:

    if(){ }

    if(){ }else{ }

    for(){ }

    while() { }

    do { } while();

    switch(){ }

    还有函数的定义,例如:

    void func(void){ }

    在大括号{}包含的代码块内定义的变量,称为:局部变量。程序测试例子如下例如:

     

    程序运行结果如下:

     

    可以看到,在main函数中定义的变量a和变量b,都是局部变量。在func函数中定义的变量a和变量c都是局部变量。

    局部变量的作用域和生命周期就是在它们所定义的代码块内。所以,总结如下:

    (1) main函数中定义的局部变量a、b的作用域就在main函数内,生命周期也就在main函数中。

    (2) func函数中定义的局部变量a、c的作用域就在func函数内,生命周期也就在func函数内;

    (3) main函数和func函数定义的局部变量,可以变量名一样,但是,它们是不同的对象。

    对于局部变量的作用域,比较好理解,只要离开了定义局部变量的代码块,那么,局部变量就无法使用,因为超越了作用域。那么,对于局部变量的生命周期,可以参考下面测试例子。程序测试例子如下:

     

    程序的运行结果如下:

     

    可以看到,调用func(9)函数的时候,在func函数中定义了局部变量a,然后,累积局部变量a的值为9。接着,调用func(10)函数的时候,进入func函数,此时,重新定义局部变量a,然后,累积局部变量a的值为10。

    那么,在调用func(9)函数的时候,定义了局部变量a,此时,当func(9)函数调用完成,离开func函数代码块的时候,局部变量a就销毁。此时,局部变量a的生命周期结束。

    所以,当接着调用func(10)函数的时候,进入func函数,此时,重新定义局部变量a,与调用func(9)函数时创建的局部变量a没有任何关系。

    因为,当离开定义局部变量所在的代码块时,局部变量就销毁,结束其生命周期。所以,我们可以总结:

    (1) 局部变量的作用域,就在定义该局部变量的代码块内;

    (2) 局部变量的生命周期,就在定义该局部变量的代码块内;

    所以,局部变量离开定义它的代码块时,局部变量声明周期结束,变量被销毁,无法再继续使用。

    韦凯峰 Linux C/C++ 程序设计教程,Linux 系统编程,Openwrt 系统开发,微信:13926572996,QQ:1523520001,博客:www.mylinux.vip

    展开全文
  • 局部变量能否和全局变量重名,如何引用一个已经定义过的全局变量,全局变量可不可以定义在可被多个.C文件包含的头文件中?为什么?,接下来为您一一介绍
  • 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

    展开全文
  • 全局变量、static 全局变量、局部变量的理解(带实例)全局变量static全局变量局部变量static局部变量代码输出结果参考 全局变量 在所有函数外部定义的变量称为全局变量(Global Variable),它的作用域默认是整个...

    全局变量、static 全局变量、局部变量的理解(带实例)

    全局变量

    在所有函数外部定义的变量称为全局变量(Global Variable),它的作用域默认是整个程序,也就是所有的源文件,包括 .c 、.cpp、.h 文件。当一个cpp文件需要使用另一个cpp文件定义的全局变量,通过用extern声明,就可以从“声明”处起,合法地使用全局变量
    全局变量全部存储在静态存储区。在程序开始执行过程中给全局变量分配空间,程序执行完毕就释放空间。程序执行过程中固定的分配空间,而不需要动态进行分配是释放。

    static全局变量

    全局变量前加static的作用是现在全局变量的作用范围,使该全局变量只在定义全局变量的源cpp文件中有效,其他源文件不能通过extern声明使用。

    局部变量

    定义在函数体、块作用域、内部的变量,作用域仅限于函数体内部、块作用域里,离开函数体、块作用域就会无效。局部变量与全局变量同名时,在该函数体内、块作用域里只会使用局部变量,自动隐藏全局变量。
    程序在运行期间为局部变量动态地分配存储空间

    static局部变量

    静态局部变量属于静态存储类别,在静态存储区内分配存储单元,在编译时赋初值,即只赋初值一次。在程序整个运行期间都不释放

    代码

    extern_1.h:

    static int st1 = 0;//所有包含h的头文件可以被其他文件通过extern引用
    

    extern_1.cpp:

    #include<stdio.h>
    #include"extern_1.h"
    
    int test = 1;//全局变量,可以被其他.c、.cpp、.h文件通过extern引用
    
    static int st2 = 0;//不!!可以被其他文件通过extern引用,static修\
    				   饰的全局变量只在该extern_1.cpp文件有效,其他文件无效。
    

    extern_2.cpp:

    extern int test;
    
    int test_static()
    {
    	return test + 1;
    }
    
    

    main.cpp:

    #include<stdio.h>
    #include"extern_1.h"
    #include<Windows.h>
    
    extern int test;
    
    //s1已经自然包含,因s1是定义在头文件中,通过#include"extern_1.h"已经包含
    
    //extern int st2;
    
    int f(void);
    
    int main(int argc, char const *argv[])
    {
    	//例1------------
    	//int test = 100;//新定义了一个局部变量,与全局变量同名,main函数里将覆盖全局变量,但是test并没作为参数传给f(),所以f()访问的还是全局变量
    	//printf("local test=%d\n", test);//
    
    	例2------------
    	test = 100;//更改全局变量的值
    	printf("local test=%d\n", test);//
    
    	f();
    	f();
    	f();
    	system("pause");
    }
    
    int f(void)
    {
    	static int all = 1;//static 局部变量
    	printf("all=%d\n", all);
    	all += 2;
    	printf("agn all=%d\n", all);
    
    	test++;//全局变量
    	printf("internal test=%d\n", test);
    
    	st1++;//s1为static全局变量,已经自然包含,因s1是定义在头文件中,通过#include"extern_1.h"已经包含
    	printf("static int st1=%d\n", st1);
    
    	return all;
    }
    

    输出结果

    main函数里给了2个例子,注释掉例2,运行例1,结果输出如下:
    在这里插入图片描述
    main函数里注释掉例1,运行例2,结果输出如下:
    在这里插入图片描述
    注意,main函数里局部变量test与全局变量同名的输出有差异,static int st2在extern_2.cpp中不可见

    参考

    https://blog.csdn.net/u013355826/article/details/53224303/

    展开全文
  • 本文就来探讨这些问题的答案,从根本上了解变量的读写性能都和哪些因素有关。 著作权声明 本文译自Nicholas C. Zakas于2009年2月10日在个人网站上发表的《JavaScript Variable Performance》。原文是唯一的正式版,...
  • 一全局变量和局部变量 (1)全局变量和局部变量的含义: 在函数体内部定义的变量叫做局部变量,在函数体外部定义的变量叫做全局变量。局部变脸只能在定义的那个函数体的内部进行使用,而全局变量在所有函数内部都...

    一全局变量和局部变量
    (1)全局变量和局部变量的含义:
    在函数体内部定义的变量叫做局部变量,在函数体外部定义的变量叫做全局变量。局部变脸只能在定义的那个函数体的内部进行使用,而全局变量在所有函数内部都可以使用。

    (2)局部变量:
    1.函数执行结束之后,定义在函数体内部的局部变量的内存空间就会被释放;
    2.且不同的函数可以定义具有相同名字的局部变量,因为他们两个的存储空间不在同一个地方,所以即使同名,也不会相互干扰。
    3.局部变量的生命周期为该变量创建到该函数体结束(生命周期:变量被创建开始到被系统回收的这一个过程,存活期间内(在变量的生存周期内)可以使用这个变量)
    4.局部变量的作用:用来存储该函数的内部使用到的临时数据。

    (3)全局变量:由于全局变量可以在程序中使用的范围太大了,在其他的开发语言中,大多不推荐使用全局变量, 一旦程序出错,需要排查的函数就特别多,但是在python中,定义一个全局变量可以给程序带来很大的便利,使用全局变量可以减少程序的开发,所以我们只需要对全局变量进行一定的设置就可以使用啦,所以在python中使用全局变量的情况还是比较广泛的。

    补充:在python中,为了避免使用全局变量导致出错,那么会对全局变量做一些限制:
    (1)只允许在函数体的内部使用全局变量的值,而不允许修改全局变量的值

    (2)如果在函数体内部修改了全局包括的值,那么会在函数体内部临时创建一个局部变量保存当前等号右边的值,所以当调用函数结束返回主程序时,或是在其他函数里面使用到这个全局变量时,全局变量的值都是不变的(不会随着被调函数体的内部的值的改变而改变)

    (3)使用global关键字可以对全局变量进行修改, 而不会创建一个局部变量,那么在修改这个变量之后如果再使用这个变量,那么这个变量的数据都会是新修改的数据。使用格式为global 变量名

    (4)注意在开发时,所有的全局变量应该都定义在所有的函数上方,以保证所有的函数都可以使用(访问到)这些全局变量

    (5)如果遇到全局变量和局部变量重名的情况,pycharm会在局部变量的下方画上一个灰色的虚线,表示已经有一个全局变量和该变量重名了,为了避免全局变量和局部变量在使用的时对人产生的干扰,有些公司规定,在全局变量的变量名前面加上一个g_或者gl_的关键字,以区分局部变量

    展开全文
  • 全局变量和局部变量的区别

    万次阅读 多人点赞 2018-05-13 16:15:15
    3)如果在定义局部变量时不赋初值的话,则对静态局部变量来说,编译时自动赋初值0(对数值型变量)或空字符(对字符变量)。而对自动变量来说,如果不赋初值则它的值是一个不确定的值。 register变量 为了提高效率,...
  • 编程语言的三大发展阶段:面向机器语言、面向过程语言、面向对象语言 ; 其中面向对象语言主要体现三个特征:封装性、继承、...2、类声明的变量称为对象变量,也简称 对象 ; 3、class 关键字是用来定义类 ; 4、...
  • 3.2 零散变量的问题 Javascript在执行前会对整个脚本文件的声明部分做完整分析(包括局部变量),从而确定变量的作用域。所以Javascript允许在函数的任意地方声明变量,无论在哪里声明,效果都等同于在函数顶部进行...
  • C语言全局变量和局部变量总结

    千次阅读 2018-08-28 15:01:10
    3)如果在定义局部变量时不赋初值的话,则对静态局部变量来说,编译时自动赋初值0(对数值型变量)或空字符(对字符变量)。而对自动变量来说,如果不赋初值则它的值是一个不确定的值。 register变量 为了提高...
  • 局部变量在函数的开头定义在函数内的符合语句内定义作用范围在包含局部变量的函数内有效一个函数内部,可以在复合函数语句中定义变量,这些变量只在本复合语句中有效,这种符合语句称为分程序或程序块 #include<...
  • 局部变量的储存类型

    2020-11-21 22:13:11
    1.自动变量auto 2.静态局部变量static 3.寄存器变量register 4.外部声明变量extern
  • java的局部变量和全局变量

    千次阅读 2019-03-19 09:22:37
    关于Java代码变量问题——局部和全局 在说明问题之前,先看一道蓝桥杯的题目: 立方变自身 观察下面的现象,某个数字的立方,按位累加仍然等于自身。 1^3 = 1 8^3 = 512 5+1+2=8 17^3 = 4913 4+9+1+3=17 … 请你计算...
  • 局部变量、全局变量和静态变量之间的区别 (1)局部变量 定义: 在一个函数内部定义的变量是局部变量,它只在本函数范围内有效。 1.主函数main定义的变量也只在主函数有效; 2.不同函数中可以使用名字相同的变量,...
  • c#局部变量和全局变量

    千次阅读 2020-07-29 20:02:49
    局部变量:声明在函数体内的变量,称之为局部变量。 using System; namespace MSN { class MainClass { int Add(int num1, int num2) { int sum;//局部变量 sum = num1 + num2; return sum; } public...
  • 局部变量C语言局部变量的存储类别自动变量静态局部变量寄存器变量 自动变量 auto int b,c=3; auto可以省略,不写与 int b,c=3;等价 静态局部变量 下面展示例子 static。 #include<stdio.h> int main() { int ...
  • C++ 之函数返回局部变量

    千次阅读 2019-08-17 15:26:51
    返回的别名引用了函数内局部变量,它的数据区是放在栈空间的,在函数调用结束后,栈空间被释放之后就不存在了,其数据可能会被覆盖掉。 2.1 普通变量的引用  通常编译器会在 return i; 处放出警告,如 ...
  • 2)、局部变量包括形参,方法局部变量,代码块局部变量,存在于方法的参数列表和方法定义中以及代码块中。2、成员变量可以被public,protect,private,static等修饰符修饰,而局部变量不能被控制修饰符及 static...
  • 变量可以分为:全局变量、静态全局变量、静态局部变量局部变量。 按存储区域分,全局变量、静态全局变量和静态局部变量都存放在内存的静态 存储区域,局部变量存放在内存的栈区。 按作用域分,全局变量在整个...
  • F.52: Prefer capturing by reference in lambdas that ...F.52 在lambda表达式中使用引用形式捕捉局部变量包含向算法传递变量的情况。 译者注:如果你不清楚捕捉(capture)是什么,请参考 https://mp.weixin...
  • c++ 线程局部变量thread_local

    千次阅读 2020-01-14 10:07:52
    Linux中的线程局部存储(一)  本章节转自:https://blog.csdn.net/cywosp/article/details/26469435  在Linux系统中使用C/C++进行多线程编程时,我们遇到最多的就是对同一变量的多线程读写问题,大多情况下遇到...
  • 成员变量和局部变量同名 在同一个作用域内不允许定义同名的多个变量。   在一个方法内,可以定义和成员变量同名的局部变量或参数,此时成员变量被屏蔽。此时如果想要访问成员变量,可以通过 this 关键字来...
  • 局部变量的赋值问题

    2021-07-08 15:06:15
    变量 i 在栈帧里面的局部变量表里面,这个局部变量表类似一个数组,里面包含了一些“槽位”来存放局部变量,i 这个变量,就是在局部变量表中的某一个槽位里面,并且 i 只会占用一个槽位,对变量 i 赋值就是往这个槽...
  • 局部变量及其生命周期详解

    千次阅读 2020-06-06 17:01:36
    局部变量:在函数内部或复合语句内部定义的变量,在其作用域内有效(作用域{}); 即:在一个函数内部定义的变量只在本函数范围内有效,也就是说只有在本函数内才能引用它们,在此函数外是不能使用这些变量的。在...
  • java方法 成员变量 局部变量概述

    千次阅读 2017-12-23 20:37:58
    成员变量,可以先使用后定义,局部变量必须先定义而后才能使用. 2.3 变量的生命周期 变量的作用域指的是变量的存在范围,只有在这个范围内,程序代码才能访问它。当一个变量被定义时,它的作用域就确定了。变量的...
  • 1.C++变量根据定义的位置的不同的生命周期,具有不同的作用域,作用域可分为6种: 全局作用域,局部作用域,语句作用域...当然,其他不包含全局变量定义的源文件需要用extern 关键字再次声明这个全局变量。 2
  • 静态局部变量具有局部作用域,它只被初始化一次,自从第一次被初始化直到程序运行结束都一直存在,它和全局变量的区别在于全局变量对所有的函数都是可见的,而静态局部变量只对定义自己的函数体始终可见。...
  • C语言中局部变量和全局变量变量的存储类别(static,extern,auto,register) 1----局部变量和全局变量 在讨论函数的形参变量时曾经提到,形参变量只在被调用期间才分配内存单元,调用结束立即释放。这一点表明形参变量...
  • 局部变量 与常量区别

    2020-03-06 02:05:56
    因为局部变量的作用域特性,所以无法使用访问权限修饰符,包括static修饰符。 相比于全局变量,局部变量没有默认值,必须手动进行初始化赋值。局部变量的生命周期取决于所处的块,当方法执行结束或语句块结束,其中...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 464,488
精华内容 185,795
关键字:

局部变量包含哪些