7.9变量的存储方式和生存期

本文详细介绍了C语言中变量的存储类别,包括动态存储方式与静态存储方式。动态存储方式包括函数调用时分配的自动变量和全局变量,而静态存储方式主要涉及静态局部变量和全局变量。静态局部变量在函数调用结束后仍保留其值,而全局变量在整个程序运行期间都存在。此外,还讨论了寄存器变量的概念,以及如何通过extern和static关键字扩展或限制外部变量的作用域。
摘要由CSDN通过智能技术生成
动态存储方式与静态存储方式

从变量值存在的时间(即生存期)来观察。变量的存储方式静态存储方式动态存储方式
静态存储方式:在程序运行期间由系统分配固定的存储空间的方式。
动态存储方式:在程序运行期间根据需要进行动态的分配存储空间的方式。
内存中的供用户使用的存储空间可以分为3部分:程序区、静态存储区、动态存储区。

数据分别存在静态存储区和动态存储区中。全局变量全部存放在静态存储区中,在程序开始执行时给全局变量分配存储区,程序执行完毕就释放。

在动态存储区中存放以下数据:
① 函数形式参数。在调用函数时给参数分配存储空间
② 函数中定义的没有用关键字static声明的变量,即自动变量
③ 函数调用时的现场保护和返回地址等
对以上这些数据,在函数调用开始时分配动态存储空间,函数结束时释放这些空间。在程序执行过程中,这种分配和释放是动态的,如果在一个程序中两次调用同一函数,而在此函数中定义了局部变量,在两次调用时分配给这些局部变量的存储空间的地址可能是不相同的。

如果一个程序中包含若干个函数,每个函数中的局部变量的生存期并不等于整个程序的执行周期,它只是程序执行周期的一部分。

在C语言中,每一个变量和函数都有两个属性:数据类型(如整型、浮点型等)和数据的存储类别(如静态存储和动态存储)。
在定义和声明变量和函数时,一般就同时指定其数据类型和存储类别,也可以采用默认方式指定(即如果用户不指定,系统会隐含地指定为某一种存储类别)。

局部变量的存储类别
自动变量(auto变量)

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

int f(int a)			//定义f函数,a为形参
{
	auto int b,c=3		//定义b,c为自动变量
		...
}
其中,a是形参,b和c是自动变量,对c赋初值3.。执行完f函数后,自动释放a,b,c所占的存储单元。

实际上,关键字"auto"可以省略,不写auto则隐含指定为“自动存储类别“,它属于动态存储方式。

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

有时希望函数中的局部变量的值在函数调用结束后不消失而继续保留原值,即其占用的存储单元不释放,在下一次再调用该函数时,该变量已有值(就是上一次函数调用结束时的值)。这时就应该指定该局部变量为”静

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值