c语言变量作用域生命周期,C/C++——C++变量的作用域与生命周期,C语言中变量的作用域和生命周期...
谭浩强书:
从存储模型可以看到,谭浩强和钱能的模型有一定的对应关系:
静态存储区 -> 全局数据区
动态存储区 -> 栈(stack)
变量的类型:
1. 局部变量和全局变量
局部变量也称为内部变量。 局部变量是在函数内作定义说明的。其作用域仅限于函数内, 离开该函数后再
使用这种变量是非法的。
全局变量也称为外部变量,它是在函数外部定义的变量。它不属于哪一个函数,它属于一个源程序文件。其
作用域是整个源程序。在函数中使用全局变量,一般应作全局变量说明。 只有在函数内经过说明的全局变
量才能使用。全局变量的说明符为 extern。但在一个函数之前定义的全局变量,在该函数内使用可不再加
以说明。
从变量的作用域(全局作用域,局部作用域,文件作用域)(即从空间)角度来分,可以分为
全局变量(静态全局变量的作用域是该文件范围(文件作用域)
局部变量。
从另一个角度,从变量值存在的作时间(即生存期)角度来分,可以分为静态存储方式和动态存储方式。
可见生存周期只是和变量存储的位置相关。
auto变量:
函数中的局部变量,如不专门声明为 static 存储类别,都是动态地分配存储空间的,数
据存储在动态存储区中。函数中的形参和在函数中定义的变量(包括在复合语句中定义的变
量),都属此类,在调用该函数时系统会给它们分配存储空间,在函数调用结束时就自动释
放这些存储空间。这类局部变量称为自动变量。自动变量用关键字 auto 作存储类别的声明。
关键字 auto可以省略,auto 不写则隐含定为“自动存储类别”,属于动态存储方式。
用 static声明局部变量 :
有时希望函数中的局部变量的值在函数调用结束后不消失而保留原值,这时就应该指定局部变量为“静态
局部变量”,用关键字 static 进行声明
register变量:
为了提高效率,C 语言允许将局部变量得值放在 CPU 中的寄存器中,这种变量叫“寄存器变量”,用
关键字 register 作声明。
1) 只有局部自动变量和形式参数可以作为寄存器变量;
2) 一个计算机系统中的寄存器数目有限,不能定义任意多个寄存器变量;
3) 局部静态变量不能定义为寄存器变量
用extern声明外部变量:
外部变量(即全局变量)是在函数的外部定义的,它的作用域为从变量定义处开始,到
本程序文件的末尾。如果外部变量不在文件的开头定义,其有效的作用范围只限于定义处到
文件终了。如果在定义点之前的函数想引用该外部变量,则应该在引用之前用关键字 extern
对该变量作“外部变量声明”。表示该变量是一个已经定义的外部变量。有了此声明,就可
以从“声明”处起,合法地使用该外部变量。
总结:
从作用域来划分分为:
- 自动变量auto,即动态局部变量(离开函数,值消失)
局部变量 - 静态局部变量static(离开函数,值还保留)
- 寄存器局部变量register(离开函数,值消失)
- 形式参数可以定义为自动变量或者register变量
- 静态外部变量(作用域只能在该文件中,文件作用域)
全局变量 - 外部变量(非静态外部变量,全局变量,可以被其它文件使用)
从变量的生存周期来分:
- 自动变量auto
动态存储 - 寄存器变量register
- 形式参数
- 静态局部变量
静态存储 - 静态外部变量
- 外部变量(全局变量)
从变量值存放的位置:
- 静态局部变量
内存中的静态存储区(全局数据区) - 静态外部变量
- 外部变量(全局变量)
- 自动变量auto
内存中的动态存储区(栈) - 形式参数
CPU中的寄存器 - 寄存器变量register
局部静态(static)变量,作用域为局部,而生命周期是全程。 静态局部变量属于静态存储方式,它具有以下特点:
(1)静态局部变量在函数内定义,但不象自动变量那样,当调用时就存在,退出函数时就消失。静态局部变量始终存在着,也就是说它的生存期为整个源程序。
(2)静态局部变量的生存期虽然为整个源程序,但是其作用域仍与自动变量相同,即只能在定义该变量的函数内使用该变量。退出该函数后, 尽管该变量还继续存在,但不能使用它。
http://blog.sina.com.cn/s/blog_80ce3a550100yl1r.html
c语言变量作用域生命周期,C/C++——C++变量的作用域与生命周期,C语言中变量的作用域和生命周期...相关推荐
- python函数中变量的作用域_Python中变量的作用域(variable scope)
此文目的 此文主要讨论和总结一下,Python中的变量的作用域(variable scope). 目的在于,通过代码,图解,文字描述,使得更加透彻的了解,Python中的变量的作用域: 以避免,在写代 ...
- java的四大作用域_JSP中的四大作用域
什么是作用域? 我们在写代码的时候,都会遇到变量的作用域的问题:比如这是一个局部变量,出了它的作用域就无法访问了.对于作用域的概念,最简单的理解就是: 在你的地盘,你还算根葱:出了你的地盘,你啥也不是 ...
- C语言中变量的作用域和生命周期
一.作用域和生命周期: 1.作用域: 通常来说,一段程序代码中所用到的名字并不总是有效 / 可用 的.而限定这个名字的可用性的代码范围就是这个名字的作用域.俗话说的好,"能力越大,责任也就越 ...
- C++中变量的生命周期
今天在论坛上看到有朋友发帖问道:既然静态全局变量与全局变量都存储在全局数据区,为什么作用域却不一样呢?也许答案非常简单:C++就是这么规定的,静态全局变量与全局变量的唯一区别就是作用域不同.对一个C+ ...
- C语言中变量的作用域和生存期的区别
变量的作用域与生存期 一.变量的作用域 1.基本概念 2.代码分析 3.总结 二.变量的生存期 1.基本概念 2.C语言的内存分布 (1)基本概念 (2)数据在内存中的分布 3.总结 4.补充 一.变 ...
- C语言中变量的作用域
C语言中变量的作用域 C语言中所有变量都有自己的作用域,申明变量的类型不同,其作用域也不同.C语言中的变量,按照作用域的范围可分为两种, 即局部变量和全局变量. 一.局部变量 局部变量也称为内部变量. ...
- python中变量的作用域有几种_Python中变量的作用域(variable scope)
http://www.crifan.com/summary_python_variable_effective_scope/ 解释python中变量的作用域 示例: 1.代码版 #!/usr/bin/ ...
- 深圳软件测试培训:JavaScript中变量和作用域
深圳软件测试培训:JavaScript中变量和作用域 JavaScript的变量与其他语言的变量有很大区别.JavaScript变量不是强制类型的,决定了它只是在特定时间用于保存特定值的一个名字而已. ...
- android中变量作用域,在 Android 和 Hilt 中限定作用域
将对象 A 的作用域限定到对象 B,指的是对象 B 的整个生命周期内始终持有相同的 A 实例.当涉及到 DI (依赖项注入) 时,限定对象 A 的作用域为一个容器,则意味着该容器在销毁之前始终提供相同 ...
最新文章
- 取得select框的text
- Ext.Net学习笔记01:在ASP.NET WebForm中使用Ext.Net
- 2018.09.24-2018.09.30
- Makefile中的MAKECMDGOALS
- 电影推荐_亲和性分析_规则提取(数据挖掘入门与实践-实验6)
- JSP慕课网阶段用户登录小例子(不用数据库)
- Apollo自动驾驶入门课程第⑧讲 — 规划(下)
- HR怼程序员频繁跳槽,程序员竟这么回怼
- 训练日志 2018.9.17
- hibernate中antlr对于hql生成抽象语法树源码解析
- UnityShader7:内置包含文件UnityCG.cginc与GG/HLSL语义
- L3-016 二叉搜索树的结构 (30 分)
- 用C语言实现C++中类的封装继承多态
- 如何将dwg文件转成kml文件
- 如何学习和使用asio 网络库
- 山东科技大学计算机学院陈卓艳,转发教务部表彰大学生学习竞赛获奖单位和个人通知...
- Win11如何重置电脑 Win11重置电脑教程
- PCB logo 制作 视频教程 内含 PCBLogoCreator软件
- linux下网速监控 linux及android分网卡网速监控
- Unity3D场景转换效果
热门文章
- 高并发架构系列:如何从0到1设计一个MQ消息队列
- kotlin对ZipInputStream与ZipOutputStream的一些拓展工具(压缩,解压)
- nginx Win下实现简单的负载均衡(2)站点共享Session
- MySQL主从介绍、准备工作、配置主、配置从、测试主从同步、断电后恢复主从...
- java中由类名和方法名字符串实现其调用【反射机制】
- Swift 开源精选-v1.0(进阶篇)
- discuz扩展css命名规则
- 用js操作table、tr、td 「字体样式及TD背景图片」
- DevExpress 11.1.6 重编译详细过程
- Apache与nginx的优缺点对比