精华内容
下载资源
问答
  • 主要介绍了C语言 全局变量和局部变量详解及实例的相关资料,需要的朋友可以参考下
  • C语言编写程序的时候我们经常会遇到这样一种情况希望在头文件中定义一个全局变量然后包含到两个不同的c文件中希望这个全局变量能在两个文件中共用 举例说明项目文件夹project下有main.ccommon.c和common.h三个...
  • 1、局部变量能否和全局变量重名? 答:能,局部会屏蔽全局。要用全局变量,需要使用”::” 局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。对于有些编译器而言,...
  • C语言中如何使用全局变量简单示例,多文件.c中如何使用全局变量 关注“M2嵌入式”公众号,回复资源免费下载
  • C语言全局变量定义方法

    万次阅读 多人点赞 2019-07-09 16:05:46
    C语言全局变量定义方法     今天调试系统的时候,需要定义几个全局位变量,定义好后一编译,发现错误一大堆,错误基本都是位变量定义时产生的。以前也定义过全局变量啊,但是先前怎么没错误?...

    C语言全局变量定义方法

        今天调试系统的时候,需要定义几个全局位变量,定义好后一编译,发现错误一大堆,错误基本都是位变量定义时产生的。以前也定义过全局变量啊,但是先前怎么没错误?瞎折腾了一会最后还是发现问题出在细节上面了。以前只是侥幸没遇到而已。今天做个总结,以后再忘记了就回来直接查一下。

         我们都知道定义在函数外部的变量就叫做全局变量,但是通常只有一个C文件和一个H文件的时候那样定义是不会出问题的。一个大的系统会包含好多个.C文件和.H文件,每个.C文件都有可能会访问全局变量,所以全局变量在定义的时候就要稍微做下改变了。通常的做法是建立一个包含系统所有全局变量的.H文件,系统用到的所有全局变量都定义在该文件内,文件名可以用Global修饰一下。在该文件中定义某个全局变量的时候需要用extern声明该变量为外部变量。比如要定义SysEventCounter标志为unsigned char型的全局变量可以这样定义:

     

    extern unsigned char SysEventCounter; <----这里是关键,不能对该变量赋值,只能声明,赋值就会报错。

    上述声明是写在.H文件中的。其他.C文件若要用到该变量,直接包含该.H文件就可以了

     

    如果想要赋初值,可以在用到它的.C文件中这样写:

    unsigned char SysEventCounter = 0;

    不用赋初值时,直接

    unsigned char SysEventCounter;

    就可以了。注意:只需要在一个.C文件中写即可,其他.C文件直接可以用。如果在其他.C文件中也这样写会产生重复定义的错误。

    全局变量对变量的类型不限制,任何类型都可以,只要按照上述方法定义就不会有错误。


    展开全文
  • C语言全局变量和局部变量

    千次阅读 多人点赞 2018-09-03 22:45:43
    讨论全局和局部变量时,其实就是对变量的作用域进行讨论; 局部变量 是什么?首先是一个变量,其次,这个变量只是在程序的局部范围内有效; 局部变量定义在那些位置: 1. 函数的开头; 2. 函数内的复合语句...

    前言

    1. 本博文的代码是基于VC++6.0编写;
    2. 讨论全局和局部变量时,其实就是对变量的作用域进行讨论;

    局部变量

    是什么?首先是一个变量,其次,这个变量只是在程序的局部范围内有效;
    局部变量定义在那些位置:
    1. 函数的开头;
    2. 函数内的复合语句内定义;
    3. 形式参数;
    4. 函数中间(非开头);

    #include <stdio.h>
    void main()
    {
    }
    void fun1(char local_0)  //形式参数:只在此函数有效;
    {
        char Local_1 = 'a';  //函数的开头:在本句以下的函数内有效;
        {
            char local_2 = 'b';  //函数的复合语句内定义:只能在本复合语句内切本行以下有效;
        }
        char Local_3 = 'c';  //函数中间(非开头):只能在本行以下有效;
    }

    注意:
    1)程序执行到某个函数时,这个函数内部的局部变量将会被分配内存空间;局部变量在函数执行结束后,变量所占内存将会被释放;

    全局变量

    是什么?是变量,可以在全局范围内有意义的变量;所谓全局也并不是真正的全局,而是在定义处以下的范围内才是有效的;
    全局变量定义的位置:
    1. 文件开头;
    2. 函数前;
    3. 函数后;
    4. 文件结尾;
    举例:

    #include <stdio.h>
    
    char Global_1 = 'A';  //源文件开头:在此行以下的所有定义的函数都有效;
    void main()
    {
    }
    
    char Global_2='B';  //函数后和函数前:此全局变量在此行之前是无效,只能在此之下的函数中有效;
    
    void fun1()
    {
        char Local_1 = 'a';
        {
            char local_2 = 'b';
        }
        char Local_3 = 'c';
    }
    
    char Global_3 = 'B';//程序结尾:程序结尾的全局变量是没有意义的;

    注意:
    1)为了区别全局变量和局部变量,往往大家在写程序的时候都喜欢将全局变量的首字母大写,而局部变量的首字母小写;
    2)全局变量的优点和缺点:
    优点:C语言的函数,每次最多只能返回一个值,但是如果定义了全局变量,那么在这个变量的有效范围内,很多函数都能改变这个变量的值,所以增加了函数之间的联系,通过函数的调用可以得到一个或一个以上的值;
    缺点:(大量使用全局变量的情况下)
    1)占内存:全局变量所占的内存空间不会像局部变量一样会被释放;
    2)降低程序清晰性:无法随时确定定义的全局变量的值的大小;
    3)降低通用性:程序设计时要求函数的“内聚性”强,函数与函数之间“耦合性”弱;定义全局变是一定要注意在有效范围内变量不能重名,并且当全局变量被跨文件调用的函数调用时,不能出现全局变量与所跨文件中存在重名变量,否则有可能会出错;所以,为了提高程序的可靠性,可移植性和可读性等,全局变量尽量少用;

    展开全文
  • C语言全局变量和局部变量总结

    千次阅读 2018-08-28 15:01:10
    可以看出,输出正确的答案,所以全局变量必须定义在我们需要用它的函数体之前。 然后,在看下局部变量: 注意事项: ①在main函数中定义的变量也是局部变量,只能在main函数中使用;同时,main函数中也...

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

     

    —————————————————————————————————————————————————————————————————————————————

     

    只有不断的学习,不断的进步,才能不被替代!

     

    只有你的不可替代性才决定你的价值!

     

    -----2016年11月18日

     

    —————————————————————————————————————————————————————————————————————————————

     

    第一部分问题:

    今天一个小伙伴问我一个问题,如图程序1:

     

    咋一看没有问题啊,后来想想确实有问题,这个c=a+a;似乎是语句,必须在函数体内才能执行,后来就看到这么一句话:

    赋值语句需要有函数执行,c语言最基本的执行体是函数,你可以初始化,但不能在函数体外赋值。

    在VC++中,确实出错,指针的地方出错,错误提示:

    错误说的是:初始化必须是一个常量。

    然后我就去掉运算的c。如图程序2:

    显示可以正常运行的。然后就比较郁闷,就问了QQ好友(矩阵)。正确答案如下:

    函数体外只能进行初始化,不能进行赋值运算。如图程序3:

    提示的错误是:变量a被重复赋初值。

    其实正确的理解就是:函数体外只能进行初始化,不能进行赋值运算。为什么第二个程序可以执行?

    因为,C语言执行过程中,对代码进行了优化,把程序2中的 int a; a=10;  优化为一句话:int a=10;这就是初始化。所以程序2是正确的,程序3中,初始化过程中:int a=10;int a=17;肯定就出错了。重复初始化。程序1中,语句必须在函数体内执行,函数体外只能进行初始化。

     

    第二部分全局变量与局部变量

    定义:

    局部变量(Local Variable):定义在函数体内部的变量,作用域仅限于函数体内部。离开函数体就会无效。再调用就是出错。

    全局变量(Global Variable):定义:所有的函数外部定义的变量,它的作用域是整个程序,也就是所有的源文件,包括.c和.h文件。

    全局变量的例子,如图程序4:

    提示的错误是 变量 x 没有定义,原因是:

    C语言代码是从前往后依次执行的,由于 x 定义在函数 func1() 之后,所以在 func1() 内无效;修改程序如下,程序5:

     

    可以看出,输出正确的答案,所以全局变量必须定义在我们需要用它的函数体之前。

    然后,在看下局部变量:

    注意事项:

    ①在main函数中定义的变量也是局部变量,只能在main函数中使用;同时,main函数中也不能使用其他函数中定义的变量。main函数也是一个函数,与其它函数地位平等。

    ②形参变量、在函数体内定义的变量都是局部变量,实参给形参传值的过程也就是给局部变量赋值的过程。

    ③可以在不同的函数中使用相同的变量名,它们表示不同的数据,分配不同的内存,互补干扰,也不会发生混乱。

    ④在语句块(由一对{}包含的若干条语句)中也可以定义变量,它的作用域只限于当前的语句块。

     

    一道综合练习题:

     

    ①先调用fun1(),在fun1()中,有局部变量n,所以输出的结果是  n:20;

    ②对于fun2(),使用了形参,形参的作用范围也是整个函数内(实参给形参传值的过程也就是给局部变量赋值的过程),所以输出的结果是  n:30;

    ③对于fun3(),没有局部变量,所以全局变量定义的 n 对所有的函数都可见。所以输出的结果是  n:10;

    ④根据局部变量注意事项第四条。所以输出的结果是  n:40;

    ⑤3C语言规定,只能从小的作用域向大的作用域中去寻找变量,而不能反过来,使用更小的作用域中的变量。对于 main() 函数,即使代码块中的 n 离输出语句更近,但它仍然会使用 main() 函数开头定义的 n,所以输出结果是 30。

     

    所以结果是:

     

    第三部分内存的分区和变量的存储

     

    内存中供用户使用的存储空间分为三部分:程序区  、静态存储区、动态存储区。

    变量的分类:

    ①从空间上分配:从变量的作用域可以分成:局部变量和全局变量。

    ②从变量的存在时间(生存周期)可以分成:静态存储和动态存储。

    静态存储:程序在运行期间分配固定的存储方式。

    动态存储:程序在运行期间根据需要动态的分配存储空间。

    全局变量全部存储在静态存储区。在程序开始执行过程中给全局变量分配空间,程序执行完毕就释放空间。程序执行过程中固定的分配空间,而不需要动态进行分配是释放。

    动态存储区主要存放以下数据:函数的形参、自动变量(没有加static的局部变量)、函数调用的现场现场保护和返回值。

    动态存储区的数据,在函数开始调用时分配动态存储空间,函数结束时释放这些空间。

    C语言中每个变量有两个属性:第一数据类型;第二存储属性。

    auto 变量:

    函数中的局部变量,如果不专门的声明为 static存储,都是动态分配存储空间。数据存储在动态存储区内。函数中的形参和函数中的变量都属于此类,调用该函数时候系统自动的分配空间,在函数结束的时候,释放该空间。这些局部变量被称为自动变量。自动变量用 auto关键字声明(可以省略auto )。

    static 变量:

    有时候希望我们调用的函数在释放的时候不消失能保留原值,这就需要定义为静态局部变量。用关键字 static声明。
    看一段程序:

    对静态局部变量的说明:
    1)静态局部变量属于静态存储类别,在静态存储区内分配存储单元。在程序整个运行期间都不释放。而自动变量(即动态局部变量)属于动态存储类别,占动态存储空间,函数调用结束后即释放。
    2)静态局部变量在编译时赋初值,即只赋初值一次;而对自动变量赋初值是在函数调用时进行,每调用一次函数重新给一次初值,相当于执行一次赋值语句。
    3)如果在定义局部变量时不赋初值的话,则对静态局部变量来说,编译时自动赋初值0(对数值型变量)或空字符(对字符变量)。而对自动变量来说,如果不赋初值则它的值是一个不确定的值。

    register变量
    为了提高效率,C语言允许将局部变量得值放在CPU中的寄存器中,这种变量叫“寄存器变量”,用关键字register作声明。

    说明:
    1) 只有局部自动变量和形式参数可以作为寄存器变量;
    2)一个计算机系统中的寄存器数目有限,不能定义任意多个寄存器变量;
    3)局部静态变量不能定义为寄存器变量。

     

    用extern声明外部变量
    外部变量(即全局变量)是在函数的外部定义的,它的作用域为从变量定义处开始,到本程序文件的末尾。如果外部变量不在文件的开头定义,其有效的作用范围只限于定义处到文件终了。如果在定义点之前的函数想引用该外部变量,则应该在引用之前用关键字extern对该变量作“外部变量声明”。表示该变量是一个已经定义的外部变量。有了此声明,就可以从“声明”处起,合法地使用该外部变量。

    extern 例子:

    在 main 函数体外定义的变量,A 、B(外部变量:它的作用域为从变量定义处开始,到本程序文件的末尾。)。想要在main中引用必须加关键字:extern 。

     

    第三部分:C语言的堆与栈

    和栈的第一个区别就是申请方式不同:栈(英文名称是stack)是系统自动分配空间的,例如我们定义一个 char a;系统会自动在栈上为其开辟空间。而堆(英文名称是heap)则是程序员根据需要自己申请的空间,例如malloc(10);开辟十个字节的空间。由于栈上的空间是自动分配自动回收的,所以栈上的数据的生存周期只是在函数的运行过程中,运行后就释放掉,不可以再访问。而堆上的数据只要程序员不释放空间,就一直可以访问到,不过缺点是一旦忘记释放会造成内存泄露。

     

    展开全文
  • 1.作用域不同:全局变量的作用域为整个程序,而局部变量的作用域为当前函数或循环等。 2.内存存储方式不同:全局变量存储在全局数据区中,而局部变量存储在栈区。 3.生命周期不同:全局数据变量的生命周期和主程序...

    1.作用域不同:
    全局变量的作用域为整个程序,而局部变量的作用域为当前函数或循环等。
    2.内存存储方式不同
    全局变量存储在全局数据区中,而局部变量存储在栈区。
    3.生命周期不同:
    全局数据变量的生命周期和主程序一样,随着程序的销毁而销毁,而局部变量是在函数内部或循环内部,随着函数的退出或循环的退出就不存在了。
    4.使用方式不同:
    全局变量在声明后程序的各个部分都可以用到,但是局部变量只能在局部使用,函数内部会优先使用局部变量再使用全局变量。

    展开全文
  • C语言全局未初始化数据段分析 https://blog.csdn.net/candcplusplus/article/details/12576185#commentBox C语言全局变量那些事儿 https://www.cnblogs.com/alantu2018/p/8503447.html
  • C语言 全局变量和局部变量的区别

    千次阅读 多人点赞 2019-01-18 14:08:32
    局部变量和全局变量的区别 背景:上午看书阅及这两对概念,有很多相似之处,故记之。 一. 局部变量&amp;全局变量 1 局部变量:“在函数内定义的变量”, 即在一个函数内部定义的变量,只在本函数范围内有效。 2 ...
  • 关于C语言全局变量的定义和用法

    千次阅读 2018-11-20 21:13:03
    在单片机编程中经常会用到全局变量,假设要在a.c文件中用到b.c文件定义的变量,我们应该怎样定义、怎样引用才能让程序看起来干净整洁呢?下面简单记录一下 假设现在有3个c文件,a.c、b.c、main.c;2个头文件,a.h,...
  • 在《C语言形参和实参的区别》中提到,形参变量要等到函数被调用时才分配内存,调用结束后立即释放内存。这说明形参变量的作用域非常有限,只能在函数内部使用,离开该函数就无效了。所谓作用域(Scope),就是变量的...
  • 本文主要是对c语言全局变量和局部变量进行了问题汇总。
  • C语言做一个加法运算结果放到全局变量 #include <stdio.h> int g_n = 10; void Plus() { int i = 10; int k = 20; g_n = i + k; } int main(int argc,char* argv[]) { Plus(); return 0; } 反...
  • C语言全局变量和局部变量同名时的使用 全局变量作用域为程序的始终,局部变量作用于当前函数。 在声明了同名变量的方法中,使用局部变量的数值 在未声明同名变量的方法中,使用全局变量的数值 开始未声明局部变量,...
  • C语言中局部变量和全局变量变量的存储类别(static,extern,auto,register)1.局部变量和全局变量在讨论函数的形参变量时曾经提到,形参变量只在被调用期间才分配内存单元,调用结束立即释放。这一点表明形参变量只有在...
  • 关于对于c语言全局变量初始化问题

    万次阅读 2018-01-08 13:50:04
    C语言里,全局变量如果不初始化的话,默认为0,也就是说在全局空间里:  int x =0; 跟 int x; 的效果看起来是一样的。但其实这里面的差别很大,强烈建议大家所有的全局变量都要初始化,他们的主要差别如下:  ...
  • 由于变量的作用域不同,我们将变量分为全局变量和局部变量。 局部变量一般是在一个函数内有效,只能在本函数内引用,其他函数不可用。全局变量一般是在函数外定义的变量,我们叫做全局变量。 即在函数内定义的是局部...
  • C语言——全局变量的定义与声明

    万次阅读 多人点赞 2019-09-28 12:31:34
    C语言全局变量的定义与声明困扰着许多C语言初学者。本文讲述了全局变量定义与声明的用法,而且本为也将阐述这种用法的内在原理。我们先从两个错误例子引入,以下两个例程都在vc6.0平台上测试。 两种错误例程 1....
  • 在用C语言开发大型的工程中,由于文件众多,在各种机缘巧合下会出现全局变量重复定义,那假如出现这种情况是什么现象呢 首先来看看一个全局变量重复定义用例 例一: testA.c文件 #include <stdio.h> #...
  • // 全局域 int i = 3; int j = i;  编译时将i 放入.data 段,设置其值为3。而对于j,编译器遇到这种语句,只知道j = i ,由于 i 是变量,不是常量,编译器无法在编译时直接得到它的值,编译器只会找到i 的...
  • C语言全局变量和局部变量习题

    千次阅读 2019-07-22 15:32:11
    //定义全局变量 void main(){ float average(float array[],int num); float ave,score[10]; int i; printf("please input ten nums: "); for(i=0;i;i++){ scanf("%f",&score[i]); } ave=average(score,10)...
  • C语言全局变量

    2020-01-04 23:33:31
    文章目录1、多个文件中使用全局变量2、本文件中使用的全局变量3、所有文件中都可访问的全局函数4、本文件中使用的全局函数 1、多个文件中使用全局变量 例: a.c中定义全局变量 int a=100 b.c中使用a.c中定义的全局...
  • C语言编程中,全局变量和局部变量命名冲突的问题。 编程学习者的迷惑的地方!
  • C语言全局变量的定义与声明

    千次阅读 多人点赞 2013-09-13 17:18:00
    C语言全局变量的定义与声明困扰着许多C语言初学者。本文讲述了全局变量定义与声明的用法,而且本为也将阐述这种用法的内在原理。我们先从两个错误例子引入,以下两个例程都在vc6.0平台上测试。 两种错误例程 1....

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 137,044
精华内容 54,817
关键字:

c语言全局变量

c语言 订阅