精华内容
下载资源
问答
  • C语言变量作用范围

    千次阅读 2014-04-12 20:47:43
    变量作用域角度来分,可以分为局部变量与全局变量。 从变量值的存在的时间(即生存期)来分,可以分为静态存储方法和动态存储方式。 所谓静态存储方式是指程序在运行期间由系统分配固定的村粗空间的方式。动态...

    从变量的作用域角度来分,可以分为局部变量与全局变量。

    从变量值的存在的时间(即生存期)来分,可以分为静态存储方法和动态存储方式。

    所谓静态存储方式是指程序在运行期间由系统分配固定的村粗空间的方式。动态存储方式则是在程序运行期间根据需要进行动态的分配存储空间的方式。

    内存供用户使用的存储空间的情况,这个存储空间可以分为三部分:

    (1)程序区   (2)静态存储区   (3)动态存储区

    数据分别存放在静态存储区和动态存储区中。全局变量全部存放在静态存储区中,在程序开始执行时,给全局变量分配存储区,程序执行完毕就释放。在程序执行过程中它们占据固定的存储单元,而不是动态地进行分配和释放。

    在动态存储区中存放一下数据:

    (1)函数形式参数,在调用函数时给形参分配存储空间。

    (2)自动变量。未加static声明的局部变量。

    (3)函数调用时的现场保护和返回地址等。


    register声明的变量不是存放在内存中,而是存在CPU的寄存器中,如果一个变量用的频繁就可以声明一个register变量。static声明的变量只赋一个初值,以后调用函数时不再赋初值而只是保留上次函数调用结束时的值。

    外部变量,它的作用域是从变量的定义处开始的,到本程序文件的末尾,在此作用域内,全局变量可以为程序中各个函数的所引用,编译时将外部变量分配到静态存储区。有时用extern来声明外部变量,以扩展外部变量的作用域!即可以先用一个未定义的变量,只要它在后面定义就好了!使用extern可以扩展它的作用。


    如果用static声明外部变量,则在其它文件中用extern是无法使用到这个变量,这就是静态外部变量,只限于本文件使用,别的文件是不能使用到得。而外部变量在其它文件是可以使用到得。


    作用域与生存期是不等的,一个静态局部变量只能在函数内使用,但它的生存期却是整个程序结束的时候销毁的。


    默认没加extern的函数都是外部函数,加了static的函数则只能在本文件中使用。



    #define  S(a,b)   a*b

    就是说把S(a,b)定义成a*b


    int* p[4]代表的是指针数组,数组里面的变量都是int型的指针。数组p【4】,然后类型为int*。

    int (*p)[4]代表的是一个二维数组,*P指向的是一个一维数组,每个数组有4个整形变量。

    展开全文
  • C语言变量类型

    2019-06-21 15:58:10
    C语言根据变量作用域的不同,将变量分为局部变量和全局变量。 1、局部变量 定义:在函数内部定义的变量,称为局部变量。形式参数也属于局部变量。 作用域:局部变量只在定义它的函数内部有效,即局部变量只有在定义...

    按变量的作用域划分

    C语言根据变量作用域的不同,将变量分为局部变量和全局变量。

    1、局部变量

    定义:在函数内部定义的变量,称为局部变量。形式参数也属于局部变量。

    作用域:局部变量只在定义它的函数内部有效,即局部变量只有在定义它的函数内部使用,其它函数不能使用它。

    2、全局变量

    定义:在所有函数外部定义的变量,称为全局变量。

    作用域:全局变量的作用范围是从定义变量的位置开始到源程序结束,即全局变量可以被在其定义位置之后的其它函数所共享。

     int a;
     
     int main ()
     {
         int b;
         return 0;
     }
    

    第1行的变量a是全局变量,第5行的变量b是局部变量。

    按变量的存储类型划分

    变量的存储类型就是指变量存储在什么地方。
    有3个地方可以用于存储变量:普通内存、运行时堆栈、硬件寄存器。变量的存储类型决定了变量何时创建、何时销毁以及它的值能保持多久,也就是决定了变量的生命周期。

    C语言根据变量的存储类型的不同,可以把变量分为:自动变量、静态变量、寄存器变量

    1、自动变量

    定义:自动变量是存储在堆栈中的。

    哪些是自动变量:被关键字auto修饰的局部变量都是自动变量,但是极少使用这个关键字,基本上是废的,因为所有的局部变量在默认情况下都是自动变量。

    生命周期:在程序执行到声明自动变量的代码块(函数)时,自动变量才被创建;
    当自动变量所在的代码块(函数)执行完毕后,这些自动变量就会自行销毁。如果一个函数被重复调用,这些自动变量每次都会重新创建。

     void test(int a, int b) {
         int c = a + b;
         
         auto int d;
     }
    

    第1行的变量a、b,第2行的变量c、第4行的变量d都是自动变量。

    2、静态变量

    定义:静态变量是存储在静态内存中的,也就是不属于堆栈。

    哪些是静态变量:

    1. 所有的全局变量都是静态变量
    2. 被关键字static修饰的局部变量也是静态变量

    生命周期:静态变量在程序运行之前创建,在程序的整个运行期间始终存在,直到程序结束。

    #include <stdio.h>
    
    int a;
    
    void test() {
        static int b = 0;
        b++;
        
        int c = 0;
        c++;
        
        printf("b=%d, c=%d \n", b, c);
    }
    
    int main() {
        int i;
        // 连续调用3次test函数
        for (i = 0; i<3; i++) {
            test();
        }
        
        return 0;
    }
    
    • 第3行的变量a、第6行的变量b都是静态变量,第9行的变量c、第16行的变量i是自动变量。

    • 因为第6行的变量b是静态变量,所以它只会被创建一次,而且生命周期会延续到程序结束。因为它只会创建一次,所以第6行代码只会执行一次,下次再调用test函数时,变量b的值不会被重新初始化为0。

    • 注意:虽然第6行的变量b是静态变量,但是只改变了它的存储类型(即生命周期),并没有改变它的作用域,变量b还是只能在test函数内部使用。

    • 我们在main函数中重复调用test函数3次,输出结果为:

    b=1, c=1 
    b=2, c=1 
    b=3, c=1 
    

    3、寄存器变量

    定义:存储在硬件寄存器中的变量,称为寄存器变量。寄存器变量比存储在内存中的变量访问效率更高(默认情况下,自动变量和静态变量都是放在内存中的)

    哪些变量是寄存器变量:

    1. 被关键字register修饰的自动变量都是寄存器变量
    2. 只有自动变量才可以是寄存器变量,全局变量和静态局部变量不行
    3. 寄存器变量只限于int、char和指针类型变量使用

    生命周期:因为寄存器变量本身就是自动变量,所以函数中的寄存器变量在调用该函数时占用寄存器中存放的值,当函数结束时释放寄存器,变量消失。

    使用注意:

    由于计算机中寄存器数目有限,不能使用太多的寄存器变量。如果寄存器使用饱和时,程序将寄存器变量自动转换为自动变量处理

    为了提高运算速度,一般会将一些频繁使用的自动变量定义为寄存器变量,这样程序尽可能地为它分配寄存器存放,而不用内存

     int main() {
         register int a;
         return 0;
     }
    

    第2行的变量a是个寄存器变量。

    展开全文
  • C语言变量-1

    2017-11-17 18:27:10
    1. 变量作用范围  变量分为“全局变量”和“局部变量”。全局变量,就是定义在所有函数之外的变量。全局变量可以被该源文件内任何函数访问,其有效范围从该变量被定义开始到该源文件结束。C语言中的大括号{ }标识...

    1. 变量的作用范围

        变量分为“全局变量”和“局部变量”。全局变量,就是定义在所有函数之外的变量。全局变量可以被该源文件内任何函数访问,其有效范围从该变量被定义开始到该源文件结束。C语言中的大括号{ }标识了变量的作用域。在作用域内,变量从被定义开始,到该右花括号结束,是其有效范围。作用域可以嵌套,但在内部的作用域会屏蔽掉其外层同名的变量。


    2. 变量的存储类别

        根据存储类别分为“静态变量”和“动态变量”。

        动态变量是程序运行过程中根据需要动态分配内存空间的变量。动态变量有:函数的形参,函数内定义非static变量。

        静态变量是程序运行期间分配固定的存储空间的变量。静态变量包括:全局变量,函数内定义的static变量。


    //展示静态变量和动态变量的不同
    #include <stdio.h>
    
    void fun()
    {
    	static int a=0;
    	int b=0;
    	a++;
    	b++;
    	printf("Static variable: %d, dynamic variable: %d\n",a,b);
    }
    
    main()
    {
    	fun();
    	fun();
    	fun();
    }

    运行结果:



        静态变量在函数调用结束后不会被销毁,而函数内部定义的动态变量,在函数调用结束后,就被销毁了。

        全局变量也是在静态存储区域分配内存空间,所以,从全局变量开始定义起,到本程序文件结束。

    展开全文
  • C语言变量

    2021-04-16 22:44:13
    按照变量作用域分可分为局部变量和全局变量 局部变量:在一个函数内部定义的变量 只有在函数内才能使用他们 全局变量:函数之外定义的变量,也称外部变量。有效范围是从定义变量的位置开始到本源文件结束。 二、...

    一、变量的作用域

    按照变量的作用域分可分为局部变量和全局变量

    局部变量:在一个函数内部定义的变量 只有在函数内才能使用他们
    全局变量:函数之外定义的变量,也称外部变量。有效范围是从定义变量的位置开始到本源文件结束。

    二、变量的存储方式

    静态存储方式:在程序运行期间由系统分配固定的存储空间的方式
    动态存储方式:程序运行期间根据需要进行动态分配空间的方式

    存储空间可以分为三部分:
    (1) 程序区
    (2) 静态存储区
    (3) 动态存储区

    全局变量全存放在静态存储区。程序开始执行给全局变量分配存储区,执行完毕释放。程序执行过程中占据固定的存储单元

    动态存储区存放以下数据
    1.函数形式参数。调用函数时给形参分配存储空间
    2.函数中定义的未加static 声明的变量,即自动变量
    3.函数调用时的现场保护和返回地址等

    三、局部变量的存储类别

    1.自动变量(auto变量)

    函数中的局部变量,如果不专门声明为static(静态)存储类别,都是动态地分配存储空间的,数据存放在动态存储区中。
    关键字"auto"可以省略,不写则隐含确定为"自动存储类别"

    2.静态局部变量(static 局部变量)

    希望函数中的局部变量的值在函数调用结束后不消失而保留原值,即占用的存储单元不释放,在下一次该函数调用时,该变量已有值,就是上一次函数调用结束时的值,可用关键字static进行声明。

    静态局部变量的说明
    (1) 静态局部变量属于静态存储类别,在静态存储区内分配存储单元。程序在整个运行期间都不释放。而自动变量(即动态局部变量)属于动态存储类别,函数调用结束后释放。
    (2) 在定义局部变量时不赋初值,对静态局部变量来说,编译时自动赋初值0或空字符。而对自动变量来说,如果不赋初值,它的值是一个不确定的值。
    (3) 虽然静态局部变量在函数调用结束后仍然存在,但不能被其他函数引用。

    3.寄存器变量(register 变量)

    如果有一些变量使用频繁,为提高执行效率,C语言允许将局部变量的值放在CPU中的寄存器中。由于对寄存器的存取速度远高于对内存的存取速度,因此这样可以提高执行效率。

    自动变量存储在动态存储区,静态局部变量存储在静态存储区,寄存器变量存储在CPU中的寄存器中。

    四、全局变量的作用域

    全局变量存放在静态存储区中,生存期是固定的,存在于程序的整个运行过程。

    一般来说,外部变量是在函数的外部定义的全局变量,作用域是从变量的定义处开始到本程序文件的末尾。

    1.在一个文件内扩展外部变量的作用域:
    在全局变量定义点之前的函数需要引用该变量,应该在引用之前用关键字extern 对变量进行外部变量声明

    2.将外部变量的作用域扩展到其他文件:

    如果程序由多个源程序文件组成,若在一个文件中想引用另一个文件中已定义的外部变量,怎么办呢?
    比如:在一个文件中定义外部变量 num,若想在另一文件中引用该变量,需要在另一文件中用 extern 对num 进行“外部变量声明”。

    3.将外部变量的作用域限制在本文件中:
    希望某些外部变量只限于被本文件调用,而不能被其他文件引用,可以在定义外部变量时加一个static 声明

    static 声明一个变量的作用

    1.对局部变量用 static 声明,把它分配到静态存储区,该变量在整个程序执行期间不释放,分配的空间始终存在。
    2.对全局变量声明,该变量的作用域只限于本文件模块。

    展开全文
  • 知识点概括 1、机器语言—>汇编语言—>高级语言; 2、VS2019使用scanf函数需要关闭JDK检查...3、变量根据作用范围分为全局变量与局部变量: (1)全局变量定义在{ }之外, (2)局部变量定义在{ }之内。 ...
  • C语言根据变量作用域的不同,将变量分为局部变量和全局变量。 1.局部变量 1> 定义:在函数内部定义的变量,称为局部变量。形式参数也属于局部变量。 2> 作用域:局部变量只在定义它的函数内部有效,即局部变量只有在...
  • 文章目录变量的三个属性:作用域、链接属。性生命周期变量的分类在变量定义时加上static产生的影响 ...根据变量作用域可以将变量分为: 全局变量:在{}外面定义的变量。 局部变量:在{}内定义的变量。 ...
  • 标识符(identifier)用于代表程序中的对象,根据所代表的对象不同,可将标识符分为变量名、数组名、函数名、数据类型说明符、符号常量名(宏名)和语句标号。2. 标识符的作用域:文件作用域:指从标识符定义或声明位置...
  • 变量的生命周期是指变量在程序运行过程中的“有效期”,根据生命周期的不同可以将变量分为全局变量和局部变量。 全局变量 生命周期为整个程序,作用域为文件开头到文件结尾。 局部变量 第一次进入函数时创建,退出...
  • 根据变量作用域将变量分为全局变量和局部变量 全局变量储存在静态数据区,局部变量在堆栈中。 全局变量(global variable):作用域为它定义处开始到它的源文件结束为止,在某一个函数中改变会影响到其他函数,...
  • C语言作用域与生存期

    千次阅读 2018-10-13 00:48:50
    根据变量声明时的位置,可将其分为全局变量和局部变量。 全局变量(global) 也称为外部变量,它是在函数外部定义的变量。它不属于哪一个函数,它属于一个源程序文件,其作用域是整个源程序。程序中所有未再次被声明...
  • 变量的作用域:是指变量在程序中的作用范围C语言变量要先定义,后使用。但是定义变量要放在程序的什么位置?在程序的什么范围可以访问所定义的变量?作用域与变量定义的位置有关。 变量的生存期:是指变量存在...
  • 根据变量作用域将变量分为全局变量和局部变量 全局变量储存在静态数据区,局部变量在堆栈中。 全局变量(global variable): 1. 作用域为它定义处开始到它的源文件结束为止,在某一个函数中改变会影响到其他...
  • 有关引用变量作用范围的内容,将在以后介绍。  (4)变量名不能是VB中的保留字(关键字),也不能是末尾带类型说明符的保留字,但可以把保留字嵌入变量名,  关键字是指VB6语言中的属性、事件、方法、过程、函数等...
  • 在主函数中输入n值,并作为实参,在调用时传送给s 函数的形参量n( 注意,本例的形参变量和实参变量的标识符都为n, 但这是两个不同的量,各自的作用域不同)。 在主函数中用printf 语句输出一次n值,这个n值是实参n的...
  • C 变量的存储类型

    千次阅读 2012-01-11 12:44:00
    根据变量所存放的数据的性质不同而分为各种数据类型;根据变量的存储方式不同而分为各种存储类型。变量的数据类型决定了该变量所占内存单元的大小及形式;变量的存储类型规定了该变量所在内存中的存储区域,因而规定...
  • C语言根据变量作用域可以把变量分为两种:局部变量和全局变量。 局部变量:在一个函数内部定义的变量是内部变量,它只在本函数范围内有效,即只有在本函数内才能使用它们,在此函数外是不能使用这些变量的,...
  • 根据定义的位置不同,分为静态全局变量和静态局部变量。 全局变量是指在所有花括号之外声明的变量,其作用范围是全局可见的,即在整个项目文件内都有效。使用static修饰的全局变量是静态全局变量,其作用域有所...
  • 本章讨论如何创建多文件程序,介绍分配内存的各种方式、管理内存的各种方式以及作用域、链接、名称 空间,这些内容决定了变量在程序的哪些部分是可见的。 第10章:对象和类 类是用户定义的类型,对象(如变量)是...
  • 本章讨论如何创建多文件程序,介绍分配内存的各种方式、管理内存的各种方式以及作用域、链接、名称 空间,这些内容决定了变量在程序的哪些部分是可见的。 第10章:对象和类 类是用户定义的类型,对象(如变量)是...
  • 本章讨论如何创建多文件程序,介绍分配内存的各种方式、管理内存的各种方式以及作用域、链接、名称 空间,这些内容决定了变量在程序的哪些部分是可见的。 第10章:对象和类 类是用户定义的类型,对象(如变量)是...
  • 本章讨论如何创建多文件程序,介绍分配内存的各种方式、管理内存的各种方式以及作用域、链接、名称 空间,这些内容决定了变量在程序的哪些部分是可见的。 第10章:对象和类 类是用户定义的类型,对象(如变量)是...
  • C++面试题 ...整理:松鼠 时间:2009-5-8 1、const 有什么用途?(请至少说明两种) 答: (1)可以定义 const 常量 ...(Google搜):DOS下程序是独占方式,堆分为近堆和远堆,近堆和栈是在数据段开辟的同...
  • 根据快速原型法的特点,说明它特别适合于开发探索型、实验型的软件。 3. 如何画分层数据流图? 答: 总的原则是:至顶而下,逐层分解(画分层数据流图)。 比较复杂的系统不能画在一张纸上,逐层分解的画法可以...
  • 局部变量,一般来讲就是具有块作用域的变量;全局变量,就是具有文件作用域的变量。 2-16 已知x、y两个变量,写一条简单的if语句,把较小的的值赋给原本值较大的变量。 解: if (x > y) x = y; else // y > x || y...
  • 日期类型 date 7字节 用于存储表中的日期和时间数据,取值范围是公元前4712年1月1日至公元9999年12月31日,7个字节分别表示世纪、年、月、日、时、分和秒 二进制数据类型 row 1~2000字节 可变长二进制数据,在具体...
  • 接口类问题(B类)-指设计、编码中出现的函数和环境、其他函数、全局/局部变量或数据变量之间的数据/控制传输不匹配的问题,在系统中起重要作用,将导致模块间配合失效等严重问题; 维护类问题(C类)-指设计、...

空空如也

空空如也

1 2
收藏数 36
精华内容 14
关键字:

c语言根据变量作用范围分为

c语言 订阅