搜文章
推荐 原创 视频 Java开发 iOS开发 前端开发 JavaScript开发 Android开发 PHP开发 数据库 开发工具 Python开发 Kotlin开发 Ruby开发 .NET开发 服务器运维 开放平台 架构师 大数据 云计算 人工智能 开发语言 其它开发
Lambda在线 > 编程范 > 【编程经验】变量的存储类型

【编程经验】变量的存储类型

编程范 2018-05-01

点击蓝字

变量的存储类型

在 C 语言中,变量是对程序中数据所占内存空间的一种抽象定义,定义变量时,用户定义变量的名、 变量的类型,这些都是变量的操作属性。不仅可以通过变量名访问该变量,系统还通过该标识符确定变量 在内存中的位置。


在计算机中,保存变量当前值的存储单元有两类:一类是内存,另一类是 CPU 的寄存 器。变量的存储类型关系到变量的存储位置,C 语言中定义了 4 种存储属性,即自动变量、外部变量、静 态变量和寄存器变量,它关系到变量在内存中的存放位置, 由此决定了变量的保留时间和变量的作用范围。



 

变量的保留时间又称为生存期,从时间的角度,可将变量分为静态存储和动态存储两种情况:

静态存储

是指变量存储在内存的静态存储区,在编译时就分配了存储空间,在整个程序的运行期间,该变量占有 固定的存储单元,程序结束后,这部分空间才释放,变量的值在整个程序中始终存在;

动态存储

是指变量存储在内存的动态存储区,在程序的运行过程中,只有当变量所在的函数被调用时,编译系统才临时为该 变量分配一段内存单元,函数调用结束,该变量空间释放,变量的值只在函数调用期存在。 




变量的作用范围又称为作用域,从空间角度,可以将变量分为全局变量和局部变量。

局部变量

是在一个函数或复合语句内定义的变量,它仅在函数或复合语句内有效,编译时,编译系统不为局部变量分配内存单元,而是在程序运行过程中,当局部变量所在的函数被调用时,编译系统根据需要,临时分配内存, 调用结束,空间释放;

全局变量

是在函数之外定义的变量,其作用范围为从定义处开始到本文件结束,编 译时,编译系统为其分配固定的内存单元,在程序运行的自始至终都占用固定单元。 




1. 自动变量 

函数中的局部变量,如不专门声明为 static 存储类别,都是动态地分配存储空间的,数据存储在动态 存储区中。


函数中的形参和在函数中定义的变量(包括在复合语句中定义的变量)都属此类,在调用该函 数时系统会给它们分配存储空间,在函数调用结束时就自动释放这些存储空间。这类局部变量称为自动变 量。自动变量用关键字 auto 进行存储类别的声明,例如声明一个自动变量: 


int fun(int a)

{

    auto int b,c=3; /*定义 b,c 为自动变量*/

}

a 是函数 fun()的形参,b、c 是自动变量,并对 c 赋初值 3。执行完 fun()函数后,自动释放 a、b、c 所占的存储单元。 




2. 外部变量 

外部变量(即全局变量)是在函数的外部定义的,它的作用域为从变量定义处开始,到本程序文件的末尾。

如果外部变量不在文件的开头定义,其有效的作用范围只限于定义处到文件末尾。

如果在定义点之前的函数想引用该外部变量,则应该在引用之前用关键字 extern 对该变量进行“外部变量声明”。表示该 变量是一个已经定义的外部变量。有了此声明,就可以从“声明”处起,合法地使用该外部变量. 用 extern 声明外部变量,扩展程序文件中的作用域 




3. 静态变量 

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




4. 寄存器变量 



点击“阅读原文”获取原文资讯




版权声明:本站内容全部来自于腾讯微信公众号,属第三方自助推荐收录。《【编程经验】变量的存储类型》的版权归原作者「编程范」所有,文章言论观点不代表Lambda在线的观点, Lambda在线不承担任何法律责任。如需删除可联系QQ:516101458

文章来源: 阅读原文

相关阅读

关注编程范微信公众号

编程范微信公众号:dotcpp

编程范

手机扫描上方二维码即可关注编程范微信公众号

编程范最新文章

精品公众号随机推荐