- 1、本文档共31页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
4.5 变量生存期演示文稿
§4.5 变量生存期 1.变量生存期含义 ? 变量生存期:在程序运行过程中变量实际占用内存或寄存器的时间。 2.变量生存期的决定 ? 变量生存期是由变量声明时为变量选择的存储类别决定的。变量的存储类别也同时影响着编译程序为变量分配内存单元的方式以及为变量设置的初始值。 3.C++程序执行时的存储组织 一个C++程序可以使用的存储空间分为三个部分:程序区、静态存储区、动态存储区。如下图所示。 程序中处理的数据分别存放在静态存储区和动态存储区中。 程序区:存放执行程序的代码。 静态存储区:存放全局变量和静态变量,程序在开始执行前为它们分配存储空间,程序执行完毕即释放这些空间。静态是指在程序执行过程中它们占据固定的存储单元而不是在程序运行期间根据需要进行动态分配。 动态存储区:存放局部变量、函数的形式参数、函数调用时的现场和返回值等。这些数据在函数(或块)开始执行时被分配动态存储空间,函数(或块)执行结束时释放这些空间。在执行过程中,这种分配和释放是动态的,如果一个程序两次调用同一个函数,分配给这个函数中局部变量的内存地址可能是不同的。 4. C++语言的存储类别 ? C++语言的存储类别分为: 自动变量 寄存器变量 静态变量(包括内静态变量和外静态变量) 外部变量?? 1)自动变量 ①含义:用auto修饰的局部变量。按常用从简原则,不加修饰的局部变量均视为自动变量。 ? auto i;??? //显式声明局部变量i是自动变量 ?? int i;???? //隐式声明局部变量i是自动变量 ②存储:存放于动态存储区内。 2)寄存器变量 ①含义:编译程序在可能的情况下把它放在寄存器中使用,以提高对该变量访问和修改的时间效率。 ②不足:由于硬件寄存器有限,编译程序在无法为寄存器变量分配给相应寄存器时,自动把它当作自动变量处理。由于C++编译具备有代码优化功能,它能自动判断哪些变量可以长时间地保存在寄存器中,以优化程序的执行速度,所以通常我们已经比较少使用register保留字。 ③定义形式: register 类型 变量名;??? //应为局部变量 ? register int a, b, c; ???register float x, y; 3)外部变量 含义:在类型前面加上extern修饰的全局变量。若一个全局变量在声明时未指定存储类别时,则缺省存储类别为外部的,并且该声明为定义性声明;若这时未指定初始化表达式,则缺省初始化为0。 extern int age=30;??? //定义性声明 extern int age;?????? //引用性声明 int age;????????????? //如此声明全局变量被视为外部变量 注意: ①作为定义性声明出现的extern变量必须是全局变量;作为引用性声明出现的extern变量可以是全局变量,也可以是局部变量。 ②定义性声明---指示编译程序要为该变量分配内存单元 ③引用性声明---告诉编译程序,该名字的变量存放在程序的其他地方已给出了定义性声明,这里只需引用其名字而不必再为它分配内存单元。 ④在一个程序中对一个变量只允许进行一次定义性声明,而可以有多次引用性声明。 ⑤定义性声明和引用性声明可以同时出现在同一个文件作用域中。 ⑥外部变量具有全局寿命,它的初始化工作在程序开始执行main()函数之前就已完成。 4)静态变量 ①含义:在变量声明的类型前面加static 修饰的变量 定义形式为:static 类型 变量名; 比如: static int a, b; ???????static float x, y; 静态变量分为内静态变量和外静态变量 ?②内静态变量 如用static 修饰的是局部变量,则该变量称为内静态变量。 内静态变量具有全局寿命,其寿命从程序启动开始到程序运行结束;但尽管它有全局寿命,在作用域外也是不可访问的。 内静态变量(静态局部变量)的初始化是在程序运行中第一次经过它的声明时完成,无论是哪种情况,初始化工作只做一次。 ③外静态变量 如用static 修饰的是全局变量,则该变量称为外静态变量。 外静态变量(静态全局变量)的初始化是在程序开始执行函数main()之前完成。 外静态变量作用域仅限于定义它的文件内,而不可由其它文件用extern引用。 ④初始化 声明静态变量时如果未指定初始化表达式时,就认为缺省初始化值为0,尽管如此,为提高程序的可读性,我们应该显式地给出其初始休表达式0。 ⑤例子:演示静态变量的用法。 #inlcludeiostream.h void grow( ) {?? static
您可能关注的文档
最近下载
- 不寐(失眠症)中医临床路径.pdf
- 中国主要研究所名单(全).docx
- 高中生物 选择性必修一 综合练习卷2 含详细答案解析.pdf VIP
- 教学课件:《国际市场营销学(第三版)》甘碧群.ppt
- 2025年高一历史教学工作计划范文(通用26篇).doc VIP
- 中心小学优秀班主任主要事迹材料推荐登记表.docx VIP
- 质量三检培训.pptx VIP
- 猜数游戏有捷径(教学设计)-2024-2025学年人教版(2024)小学信息技术五年级全一册.docx
- 2023年武汉生物工程学院网络工程专业《计算机网络》科目期末试卷A(有答案).docx VIP
- 2024年中考语文复习:文学常识类选择题专项练习题(含答案解析).pdf VIP
文档评论(0)