精华内容
下载资源
问答
  • 局部变量存储类别

    千次阅读 2018-08-21 08:52:37
    1.自动变量(auto) int f(int a) { auto int a,b; } auto 可以省略 int b,c=3;...2.静态局部变量(static) #include< stdio.h> int main() { int f(int t); int a=2,...

    1.自动变量(auto)
    int f(int a)
    {
    auto int a,b;
    }
    auto 可以省略
    int b,c=3;等价于 auto int b,c=3;
    2.静态局部变量(static)
    #include< stdio.h>
    int main()
    {
    int f(int t);
    int a=2,i;
    for(i=0;i<3;i++)
    printf(“%d \n”,f(a));
    return 0
    }
    int f(int a)
    {
    auto int b=0;//自动变量
    static c=3;//局部变量
    b=b+1;
    c=c+1;
    return (a+b+c);
    }
    输出:7.8.9
    static c=c+1;局部变量不释放,4,5,6
    例:
    1到5阶乘
    #include< stdio.h>
    int main()
    {
    int fac(int n)
    int i;
    for(i=1;i<=5;i++)
    printf(“%d!=%d\n”,i,fac(i));
    return 0;
    }
    int fac(int n)
    {
    static int f=1;
    f=f*n;
    retrun(f);
    }

    展开全文
  • 局部变量C语言局部变量存储类别自动变量静态局部变量寄存器变量 自动变量 auto int b,c=3; auto可以省略,不写与 int b,c=3;等价 静态局部变量 下面展示例子 static。 #include<stdio.h> int main() { int ...

    **

    C语言局部变量的存储类别

    **

    自动变量

    auto int b,c=3;
    auto可以省略,不写与
    int b,c=3;等价

    静态局部变量

    下面展示例子 static

    #include<stdio.h>
    int main()
    {
        int f(int);
        int a=2,i;
        for(i=0;i<3;i++)
            printf("%d\n",f(a));
        return 0;
    }
    
    int f(int a)
    {
        int b=0;
        static int c=3;
        b = b+1;
        c = c+1;
        return(a+b+c);
    }
    

    结果为:
    7
    8
    9
    c是静态局部变量,函数调用结束后,他并不释放,保留其当前值。在第二次调用时即为4。b在一次函数调用后即释放,以后每次函数调用初值仍为0。

    寄存器变量

    register

    register int c;
    

    注意:
    3种局部变量的存储位置是不同的:自动变量存储在动态存储区;静态局部变量存储在静态存储区;寄存器存储在cpu中的寄存器中。

    展开全文
  • C语言中局部变量和全局变量变量的存储类别(static,extern,auto,register) 1----局部变量和全局变量 在讨论函数的形参变量时曾经提到,形参变量只在被调用期间才分配内存单元,调用结束立即释放。这一点表明形参变量...

    C语言中局部变量和全局变量变量的存储类别(static,extern,auto,register)

    1----局部变量和全局变量
    在讨论函数的形参变量时曾经提到,形参变量只在被调用期间才分配内存单元,调用结束立即释放。这一点表明形参变量只有在函数内才是有效的,离开该函数就不能再使用了。这种变量有效性的范围称变量的作用域。不仅对于形参变量,C语言中所有的量都有自己的作用域。变量说明的方式不同,其作用域也不同。C语言中的变量,按作用域范围可分为两种,即局部变量和全局变量。

    1.1 局部变量
    局部变量也称为内部变量。局部变量是在函数内作定义说明的。其作用域仅限于函数内,离开该函数后再使用这种变量是非法的。
    关于局部变量的作用域还要说明以下几点:

    1. 主函数中定义的变量也只能在主函数中使用,不能在其它函数中使用。同时,主函数中也不能使用其它函数中定义的变量。因为主函数也是一个函数,它与其它函数是平行关系。这一点是与其它语言不同的,应予以注意。
    2. 形参变量是属于被调函数的局部变量,实参变量是属于主调函数的局部变量。
    3. 允许在不同的函数中使用相同的变量名,它们代表不同的对象,分配不同的单元,互不干扰,也不会发生混淆。如在前例中,形参和实参的变量名都为n,是完全允许的。
    4. 在复合语句中也可定义变量,其作用域只在复合语句范围内。

    1.2 全局变量
    全局变量也称为外部变量,它是在函数外部定义的变量。它不属于哪一个函数,它属于一个源程序文件。其作用域是整个源程序。在函数中使用全局变量,一般应作全局变量说明。只有在函数内经过说明的全局变量才能使用。全局变量的说明符为extern。但在一个函数之前定义的全局变量,在该函数内使用可不再加以说明。

    2. 变量的存储类别
    2.1 动态存储方式与静态动态存储方式
    前面已经介绍了,从变量的作用域(即从空间)角度来分,可以分为全局变量和局部变量。
    从另一个角度,从变量值存在的作时间(即生存期)角度来分,可以分为静态存储方式和动态存储方式。

    • 静态存储方式:是指在程序运行期间分配固定的存储空间的方式。
    • 动态存储方式:是在程序运行期间根据需要进行动态的分配存储空间的方式。

    用户存储空间可以分为三个部分:

    1. 程序区;
    2. 静态存储区;
    3. 动态存储区;

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

    动态存储区存放以下数据:

    1. 函数形式参数;
    2. 自动变量(未加static声明的局部变量);
    3. 函数调用实的现场保护和返回地址;

    对以上这些数据,在函数开始调用时分配动态存储空间,函数结束时释放这些空间。
    在c语言中,每个变量和函数有两个属性:数据类型和数据的存储类别。

    2.2 auto变量
    函数中的局部变量,如不专门声明为static存储类别,都是动态地分配存储空间的,数据存储在动态存储区中。函数中的形参和在函数中定义的变量(包括在复合语句中定义的变量),都属此类,在调用该函数时系统会给它们分配存储空间,在函数调用结束时就自动释放这些存储空间。这类局部变量称为自动变量。自动变量用关键字auto作存储类别的声明。

    a是形参,b,c是自动变量,对c赋初值3。执行完f函数后,自动释放a,b,c所占的存储单元。
    关键字auto可以省略,auto不写则隐含定为“自动存储类别”,属于动态存储方式。

    2.3 用static声明局部变量
    有时希望函数中的局部变量的值在函数调用结束后不消失而保留原值,这时就应该指定局部变量为“静态局部变量”,用关键字static进行声明。

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

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

    说明:

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

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

    说明:在本程序文件的最后1行定义了外部变量A,B,但由于外部变量定义的位置在函数main之后,因此本来在main函数中不能引用外部变量A,B。现在我们在main函数中用extern对A和B进行“外部变量声明”,就可以从“声明”处起,合法地使用该外部变量A和B。

    展开全文
  • 2、静态局部变量 static 即在函数调用结束后继续保留原值,占有的存储单元并不释放,在下一次调用该函数时,该变量已经有值。 (若没有声明为static类别,则默认为auto类别) 具体区别,通过下面这段代码来理解:...

    1、自动变量  auto

    动态的分配存储空间,在函数调用结束后,就自动释放这些存储空间。

    2、静态局部变量 static

    即在函数调用结束后继续保留原值,占有的存储单元并不释放,在下一次调用该函数时,该变量已经有值。

    (若没有声明为static类别,则默认为auto类别)

    具体区别,通过下面这段代码来理解:

     1 #include<stdio.h>
     2 
     3 int fun(int x)
     4 {
     5     int a=0;
     6     static int b=3;
     7     a++;
     8     b++;
     9     return a*a+b*b-x;
    10 }
    11 int main()
    12 {
    13     int i,a=1;
    14     for(i=0;i<3;i++)
    15     {
    16         printf("%d\n",fun(a));
    17     }
    18     return 0;
    19 }

    for循环里第一次结束,fun函数里a、b自增后:a=1,b=4,x=1,返回16。

    i增1后,第二次,fun函数里a、b自增后:a=1,b=5,x=1,返回25。

    之后类似。。

     

    转载于:https://www.cnblogs.com/wy9417/p/6416258.html

    展开全文
  • 第十二次课----全局变量、局部变量存储类别 一、作用域  1.文件作用域  2.函数作用域  3.语句块  demo1:   int main(void)  {  int a = 0;  {  int i = 0;  }  i = 10;//错误,i超出了它的作用域范围 ...
  • C语言中局部变量和全局变量 变量的存储类别(static,extern,auto,register) 局部变量和全局变量 在讨论函数的形参变量时曾经提到,形参变量只在被调用期间才分配内存单元,调用结束立即释放。这一点表明形参变量...
  • ① auto(自动变量)在...② static(静态局部变量)函数中的静态局部变量在函数调用结束后不消失且继续保留原值,占用的储存单元不释放。eg:使用静态局部变量求分别输出n的一次方到n的n次方#include &lt;stdio...
  • 今天分享有关变量的有关知识。其中涉及知识点有全局变量,局部变量,作用域存在重叠区的同名变量,变量的储存类别(自动,寄存器,外部,静态变量)。
  • 1、局部变量:在函数内部定义,只在本函数内有效。 注意:在main中定义的局部变量也只在主函数中有效。主函数也不能使用其他函数中定义的变量。不同函数可以使用同名变量,但不不同对象,互不干扰。形式参数也是...
  • 变量的存储类别(偏理论,可以不看): 静态局部变量: 用extern声明外部变量(全局变量) 总结: 转载于:https://www.cnblogs.com/souhaite/p/10920340.html...
  • 函数中的局部变量,如果不专门声明为static存储类别,都是动态的分配存储空间的,数据存储在动态存储区中。这类变量叫做自动变量,自动变量可以用关键字auto作为存储类别的声明,实际上关键字auto是可以省略的(一般...
  • C语言是一门通用计算机编程语言,应用...C语言变量存储类别和内存四区变量存储类别变量声明/定义的一般形式:存储类别 数据类型 变量名存储类别指的是数据在内存中存储的方法。存储方法分为静态存储和动态存储两大类...
  • 变量存储类别

    2015-04-10 15:32:51
    c语言中变量存储类别
  • 1.局部变量和全局变量 在讨论函数的形参变量时曾经提到,形参变量只在被调用期间才分配内存单元,调用结束立即释放。这一点表明形参变量只有在函数内才是有效的,离开该函数就不能再使用了。这种变量有效性的范围称...
  • 函数变量存储类别

    2020-01-06 11:53:35
    1.变量存储类别 1.静态变量(static): (1)在编译时分配存储空间,所占存储单元直到程序结束时才释放,他的值在程序运行过程中一直存在,而且变量的初始化只进行一次,这说明:在第二次进行调用时,静态局部...
  • 1.局部变量和全局变量 在讨论函数的形参变量时曾经提到,形参变量只在被调用期间才分配内存单元,调用结束立即释放。这一点表明形参变量只有在函数内才是有效的,离开该函数就不能再使用了。这种变量有效性的范围称...
  • 局部变量和全局变量 变量存在的生存期 ---------> 静态存储方式和动态存储方式 二、局部变量局部变量也称为内部变量。局部变量是在函数内作定义说明的。其作用域仅限于函数内,离开函数后再使用这种变量...
  • C语言变量存储类别

    2015-03-17 20:11:37
    1.变量存储类别 变量除了类型属性(int ,char ,float....)外,另外一个重要属性就是存储类别 系统把程序中用到的数据区分为静态存储区和动态存储区。 静态存储区:在这个区分配了空间的变量,在程序...
  • 变量存储类别

    2018-10-16 12:15:02
    存储类别:是指数据在内存中的存储方式 (1)供用户使用的存储空间: 程序区 静态存储区:编译时候分配空间,程序结束释放空间。(存放全局变量) 动态存储区:定义时动态分配空间,对应函数完成时就释放空间,再...
  • C++变量存储类别

    2019-07-24 15:29:40
    C++变量的存储类别 存储空间分类 内存中用户区的存储空间只要分为三部分:程序区、静态存储区和动态存储区...静态局部变量,函数结束后变量不释放,保留上次调用的值 register 寄存器变量,将变量的值存放在CPU寄...
  • C语言程序设计 第8章 函数 第3讲变量存储类别及内外部函数 328677005 C语言课程交流群 1.局部变量和全局变量 提纲 2.动态变量和静态变量 3.变量的其他存储类别 4.内部函数与外部函数 1. 局部变量和全局变量 局部变量...
  • 局部变量与全局变量及其存储方式 1、变量及其存储的分类 从变量的作用域的角度观察,变量可以分为全局变量和局部变量;变量的存储分为静态存储方式和动态存储方式。 内存中供用户使用的存储空间可分为程序区、静态存...
  • 本博文主要对C语言中常见的与变量存储类别相关的关键字进行介绍。 在介绍这些关键字之前,先对变量的存储方式进行说明。 用户的存储空间可以划分为三个部分: 1)程序区; 2)静态存储区; 3)动态存储区。 全局变量...
  • C语言之变量存储类别

    2019-07-19 09:46:08
    C语言根据变量的生存周期来划分,可以分为静态存储方式和动态存储方式。 静态存储方式:是指在程序运行期间分配固定的存储空间的方式。静态存储区中存放了在整个程序执行过程中都存在的变量,如全局变量。 动态...
  • C语言:变量存储类别

    2017-07-22 15:58:30
    由此引出4种存储类别变量: 自动变量: 寄存器变量: 寄存器是cpu的重要组成部分,英语叫cache,是一个运算速率快但是存储空间小的内存。起作用主要用于高速数据缓存交换到运算器和ROM中 因此,寄存器变量用于...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 22,588
精华内容 9,035
关键字:

局部变量的存储类别