c语言中变量的储存属性分为几类?能举例吗?
在C语言中,对变量的存储类型说明有以下四种:
1、auto 自动变量
2、register 寄存器变量
3、extern 外部变量
4、static 静态变量
所谓存储类型是指变量占用内存空间的方式,也称为存储方式。
变量的存储方式可分为“静态存储”和“动态存储”两种。
1、静态存储变量通常是在变量定义时就在存储单元并一直保持不变,直至整个程序结束。
2、动态存储变量是在程序执行过程中,使用它时才分配存储单元,使用完毕立即释放。典型的例子是函数的形式参数,在函数定义时并不给形参分配存储单元,只是在函数被调用时,才予以分配,调用函数完毕立即释放。
如果一个函数被多次调用,则反复地分配、释放形参变量的存储单元。从以上分析可知,静态存储变量是一直存在的,而动态存储变量则时而存在时而消失。
扩展资料:
变量根据定义的位置的不同的生命周期,具有不同的作用域,作用域可分为6种:全局作用域,局部作用域,语句作用域,类作用域,命名空间作用域和文件作用域。
一、从作用域看:
1、全局变量具有全局作用域。全局变量只需在一个源文件中定义,就可以作用于所有的源文件。当然,其他不包含全局变量的定义的源文件需要用extern关键字再次声明这个全局变量。
2、静态局部变量具有局部作用域,它只被初始化一次,自从第一次被初始化直到程序运行结束一直存在,它和全局变量的区别在于全局变量对所有函数都是可见的,而静态局部变量只对定义自己的函数体始终可见。
3、局部变量也只有局部作用域,它是自动对象(auto),它在程序运行期间不是一直存在,而是只在函数执行期间存在,函数的一次调用执行结束后,变量被撤销,其所占用的内存也被收回。
4、静态全局变量也具有全局作用域,它与全局变量的区别在于如果程序包含多个文件的话,它作用于定义它文件里,不能作用到其他文件里,即被static关键字修饰过的变量具有文件作用域。这样即使两个不同的源文件都定义了相同名字的静态全局变量,它们也是不同的变量。
二、从分配空间看:
全局变量,静态局部变量,静态全局变量都在静态存储区分配空间,而局部变量在栈里分配空间。
全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式。这两者在存储方式上并无不同。这两者的区别虽在于非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。
而静态全局变量则限制了其作用域,即只在定义该变量的源文件内有效,在同一个源程序的其他源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用,因此可以避免在其他源文件中引起错误。
1、静态变量会放在程序的静态数据存储区(全局可见)中,这样可以在下一次调用的时候还可以保持原来的赋值。这一点是它与堆栈变量和堆变量的区别。
2、变量用static告知编译器,自己仅仅在变量的作用范围内可见。这一点是它与全局变量的区别。
参考资料来源:百度百科-变量-存储类型
TurboC2.0支持四种变量存储类型。说明符如下:
autostaticexternregister
下面分别来介绍。
一、auto
auto称为自动变量。
局部变量是指在函数内部说明的变量(有时也称为自动变量)。用关键字auto进
行说明,当auto省略时,所有的非全程变量都被认为是局部变量,所以auto实际上
从来不用。
局部变量在函数调用时自动产生,但不会自动初始化,随函数调用的结束,这
个变量也就自动消失了,下次调用此函数时再自动产生,还要再赋值,退出时又自
动消失。
二、static
static称为静态变量。根据变量的类型可以分为静态局部变量和静态全程变量。
1.静态局部变量
它与局部变量的区别在于:在函数退出时,这个变量始终存在,但不能被其它
函数使用,当再次进入该函数时,将保存上次的结果。其它与局部变量一样。
2.静态全程变量
TurboC2.0允许将大型程序分成若干独立模块文件分别编译,然后将所有模块
的目标文件连接在一起,从而提高编译速度,同时也便于软件的管理和维护。静态
全程变量就是指只在定义它的源文件中可见而在其它源文件中不可见的变量。它与
全程变量的区别是:全程变量可以再说明为外部变量(extern),被其它源文件使用,
而静态全程变量却不能再被说明为外部的,即只能被所在的源文件使用。
三、extern
extern称为外部变量。为了使变量除了在定义它的源文件中可以使用外,还要
被其它文件使用。因此,必须将全程变量通知每一个程序模块文件,此时可用
extern来说明。
四、register
register称为寄存器变量。它只能用于整型和字符型变量。定义符register说
明的变量被TurboC2.0存储在CPU的寄存器中,而不是象普通的变量那样存储在内
存中,这样可以提高运算速度。但是TurboC2.0只允许同时定义两个寄存器变量,
一旦超过两个,编译程序会自动地将超过限制数目的寄存器变量当作非寄存器变量
来处理。因此,寄存器变量常用在同一变量名频繁出现的地方。
另外,寄存器变量只适用于局部变量和函数的形式参数,它属于auto型变量,
因此,不能用作全程变量。定义一个整型寄存器变量可写成:
registerinta;
对于以上所介绍的变量类型和变量存储类型将会在以后的学习中,通过例行程
序中的定义、使用来逐渐加深理解。
静态变量 static
动态变量(auto)可省,默认是auto
寄存器变量 register
外部变量extern
例子在谭老师的《C程序设计》第三版上的189页开始有具体介绍!!!!
希望对你帮助!!
祝你学业有成!!!
按照变量的位置不同可以划分为
静态变量 static
动态变量(auto)
寄存器变量 register
按数据类型可以分:
整形int
浮点型float
字符型char
指针类型 *
浮点型又分单精度和双精度(single和double)
C语言中变量的地址是什么类型的?
变量的地址,在C语言中,一般写作指针类型。不同类型的变量地址,用不同的指针进行保存。比如,char 类型的地址,使用char*保存,而int型地址,用int *保存。除此外,部分情况下也会采用整型类型来保存变量地址,具体使用何种整型类型,取决于编译器:1 16位编译器,地址占16位,2字节,可以使用short...
在C语言中,全局变量的存储类别是?
由下图可以看出a、b、x、y 都是在函数外部定义的外部变量,都是全局变量。但x,y 定义在函数f1之后,而在f1内又无对x,y的说明,所以它们在f1内无效。 a,b定义在源程序最前面,因此在f1,f2及main内不加说明也可使用。全局变量是使用相同的内存块在整个类中存储一个值全局变量extern与static,...
C语言中变量存储类型有哪些
将保存上次的结果。其它与局部变量一样。2.静态全程变量 turbo c2.0允许将大型程序分成若干独立模块文件分别编译,然后将所有模块 的目标文件连接在一起,从而提高编译速度,同时也便于软件的管理和维护。静态 全程变量就是指只在定义它的源文件中可见而在其它源文件中不可见的变量。它与 全程变量的区别是:...
c语言常量变量在内存中的存储方式
从静态存储区域分配:内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。在栈上创建(地址从大到小):在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,...
C语言中的 局部变量,存储在什么地方?
C语言中的局部变量存储在栈里。普通的局部变量在栈空间上分配,这个局部变量所在的函数被多次调用时,每次调用这个局部变量在栈上的位置都不一定相同。局部变量也可以在堆上动态分配(malloc),但是记得使用完这个堆空间后要释放之。在栈空间上分配时是要注意内存的,不能分配内存过大。如果栈内空间小于...
在c语言中,变量名 地址 存储单元的内容 分别怎样储存?
最后,对于C语言中的变量来说,它具备两个基本的属性,一个是地址,一个是内容。正是因为此,所以在函数参数传递时有两种方法一种是传址,一种是传值 。比如下面的代码:int a = 2; \/\/a是变量名,它有两个属性,一个是地址,一个是值。int *p = &a; \/\/使用取地址运算符&即可获取变量的...
c语言里什么变量存储在堆中什么变量存储在栈中啊!
来自百科:1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。3、全局区(静态区)...
C语言中的自动变量和寄存器变量是什莫?
C语言学习之变量存储 C语言中对变量的说明包括两方面的内容:变量类型以及变量的存储类型。变量类型如:int(整形),char(字符型)是用来说明变量所占用的内存空间的大小。变量存储类型用来说明变量的作用范围。C语言的变量存储类有:自动类、寄存器类、静态类和外部类。关键字auto加在变量名及其类型前,...
c语言中形参的缺省存储类别是?
c语言中形参或者说所有的变量,缺省的存储类别都是auto的。C语言中四种存储类别:auto、static、extern、register 。其中大部分均为auto,auto为默认的类别,一般未标明的都是auto;如果标明了哪种类别,那就按标明的来。
C语言中,变量到底是个什么概念?
C语言中的变量是指在程序运行时其值可以改变的量,变量的功能就是存储数据。变量有三个基本要素:变量名:每一个变量都应该有一个名字。变量的数据类型:每一个变量都应具有一种数据类型(在定义时指定)内存中占据一定的储存空间 变量的值:变量对应的存贮空间中所存放的数。
堂琛甲氧: C语言中的变量有四种存储类型,这四种存储类型的关键字分别是 auto(自动) extern(外部) static(静态) register(寄存器)
获嘉县13387555072: C语言关于函数变量的四个存储类型 - ?
堂琛甲氧: 在函数体内声明的变量在默认情况下都是auto存储类型 在代码块之间传递信息的一种方法就是使用外部变量.当一个变量在函数的外部被声明时,安的存储空间是永久分配的,安人存储类型是extren.外部变量的声明看上去和函数或代码块内部所...
获嘉县13387555072: C语言中有哪些存储类型? - ?
堂琛甲氧: c语言中的存储类型有auto, extern, register, static 这四种,存储类型说明了该变量要在进程的哪一个段中分配内存空间,可以为变量分配内存存储空间的有数据区、BBS区、栈区、堆区.1. auto存储类型 auto只能用来标识局部变量的存储类型...
获嘉县13387555072: 关于C语言的变量的储存类别 - ?
堂琛甲氧: 举个例子,我们在C语言中定义数组a[10],这就是静态存储,也就是说不知道这个数组够不够用,程序都是分配给它这么大,在编译以后程序就要分配这么多的内存.然后程序运行,够用程序就执行下去,不够用了程序就保错,因为先前就给你分配那么多,不够用了也没办法这是固定的.动态存储的意思是先前分配给某个变量的内存是不固定的,在程序的运行过程中根据需要分配所需资源,还拿数组举例,可以用指针再运行时再次分配长度(int *)malloc(sizeof(int)*5).静态执行的快,因为不需要执行过程中分配资源.但是若资源事先不能预估,那就要用动态了.
获嘉县13387555072: C中有哪些变量的存储类型 - ?
堂琛甲氧: c语言变量存储类型 auto static extern static extern register auto 局部变量auto 变量是用堆栈(stack)方式占用储存器空间,因此,当执行此区段是,系统会立即为这个变量分配存储器空间,而程序执行完后,这个堆栈立即被系统收回.在大括号{...
获嘉县13387555072: 变量的存储属性有哪四种? - ?
堂琛甲氧: 变量和标号分别表示储存单元.变量表示的储存单元中存放变量;标号表示的储存单元中存放指令代码.变量和标号的属性:1、段值,变量和标号对应储存单元所在段的段值2、偏移,对应储存单元起始地址的段内偏移3、类型,变量的类型主要是db(字节),dw(字),dd(双字),标号的类型主要是near,farnear表示段内标号,far表示段间标号
获嘉县13387555072: 在C语言中,存储类别包括 - ?
堂琛甲氧: 四种变量存储类型.说明符如下:auto static extern register 一、auto auto称为自动变量.局部变量是指在函数内部说明的变量(有时也称为自动变量).用关键字auto进 行说明, 当auto省略时, 所有的非全程变量都被认为是局部变量, 所以...
获嘉县13387555072: 举例写出C语言的四种存储类别.?
堂琛甲氧: auto:自动变量auto存储在内存的堆栈区,属于临时性存储变量,并不长期占用内存,可以被多次覆盖.register:寄存器变量register与auto一样属于自动类别.区别在于register的值保存在CPU的寄存器中.计算机中只有寄存器中的数据才能...
获嘉县13387555072: C语言中,变量的存储类型有四种,什么的存取速度最快 - ?
堂琛甲氧: int 占4个字节,float 占4个字节,double 占8个字节,char 占1个字节