已阅读5页,还剩15页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第九章 数据的存储方式,9.1 局部变量和全局变量 9.2 变量的存储方式 9.3 内部函数和外部函数 9.4 动态存储单元 9.5 变量修饰符 const,9.1 局部变量和全局变量 函数的作用域规则,是关于控制一段代码是否能够调用或者访问另一段中的代码或数据的一些规定。 9.1.1 局部变量 在任何一个代码块内定义的变量叫做局部变量。所谓代码块就是在一对花括号内的代码段。说明局部变量最常见的代码块是函数。,图9.1 局部变量的作用域示意图,图9.1表示出各局部变量的作用域。 局部变量在没有被赋值之前,它的值是不确定的。 形参也是局部变量。它的作用域和使用规则,与函数内部的局部变量完全一样,不再讨论。,9.1.2 全局变量 在函数之外定义的变量,称为全局变量,也叫做外部变量。,9.2 变量的存储方式,我们从变量的作用域的角度,把变量区分为全局变量和局部变量。从变量值存在时间的角度看,变量又可分为静态存储变量和动态存储变量。 供用户使用计算机的内存空间,可分为以下三个部分: (1) 应用程序区; (2) 静态存储区; (3) 动态存储区。,在两大类存储方法中,变量又可具体分为四种:自动的(auto)、静态的(static)、寄存器的(register)和外部的(extern)。 在变量定义语句中,存储定义符放在它所修饰的基本数据类型前面,其一般形式如下: storage_type type_specifier variable_list; 这里,storage_type是存储定义符(auto,static,register,extern);type_specifier是基本数据类型; variable_list是被说明的变量名表。,9.2.1 局部变量的存储定义 1. 自动变量(auto) 局部变量一般情况下(不加特殊声明)属于动态存储类。,2. 静态局部变量(static) 有时希望局部变量的值,在每次离开其作用范围后不消失并保持原值,占用的存储空间不释放。这时,应该用存储定义符static将变量定义为静态局部变量。例如语句: static int num1, num2; 定义变量num1和num2为静态局部变量。,3. 寄存器变量(register) 如果变量在程序运行中使用非常频繁,则为存取该变量要消耗很多时间。利用寄存器操作速度快的特点,将变量存放在CPU的寄存器中,可以提高程序的运行效率。寄存器变量占用CPU的高速寄存器,不占用内存单元。变量的值就保存在CPU的寄存器中。 定义寄存器变量语句的一般形式为: register 类型名 变量名表;,9.2.2 全局变量的存储定义 1. 外部全局变量 如果在一源文件中将某些变量定义为全局变量。而这些全局变量允许其它源文件中的函数引用的话,就需要有一种办法,把程序的全局变量告诉所有的模块文件。解决的办法是,在一个模块文件中将变量定义为全局变量,而在其它模块文件中,用extern来说明这些变量。例如, extern int a; 说明整型变量a在其它源程序文件中已经定义为全局变量,在本文件中被说明是外部存储类型的,因而本文件可以引用。,2. 静态全局变量 静态全局变量是这样一种全局变量,它在被定义的源程序文件以外是不可见的。也就是说,静态全局变量只限于它所在的源程序文件中的函数引用,而不能被其它源程序文件中的函数引用。静态全局变量定义的形式是在全局变量定义语句的数据类型前加静态存储定义符static。其形式和局部静态变量是一样的。例如, static int a: 定义为静态全局变量。,9.2.3 变量存储类型小结 一个数据包含有两个属性:数据类型和存储类型。 从作用域的角度,我们有局部变量和全局变量。按它们的存储类别,局部变量又分为自动的、静态的和寄存器的三种。全局变量又分为静态的和外部的两种。,现将上述变量的存储类型从作用域和生存期的角度归纳成表9.2.2。表中“”表示“是”,“”表示“否”。,9.3 内部函数和外部函数,9.3.1 内部函数 如果一个函数只能被本源程序文件的函数所调用,这样的函数称为内部函数。内部函数也叫做静态函数。内部函数在定义时,要在函数类型前加上说明符static。例如, static char myfunction(char ch) 使用内部函数的好处是,如果在一个较大的程序的某些文件中,函数同名不会产生相互干扰。,9.3.2 外部函数 外部函数可以被程序的其它文件内的函数调用。外部函数定义的方法是,在定义函数时,在函数类型前加extern。例如, extern float func(int x,float y) 如果在定义函数时省略extern,则隐含为外部函数。例如,例9.2.4程序中的函数: void num_init() int numbers() 在定义时虽然没有用extern说明,但实际上就是外部函数,它们可以被另一个文件的函数调用。,9.3.3 多文件程序的编译工程文件 (1) 选择主菜单中的projet,它有如下的子菜单: Open project. Close project. Add item. Delete item Local options. Include files. (2) 用Add item命令将组成该工程的各文件装入。,编译、连接和运行文件。在集成开发环境下,这可用下述的两种方法之一进行: (1) 使用主菜单的Run命令进行编译、连接和运行; (2) 选用Compile Make命令进行编译和连接,然后再用Run命令运行。,9.4 动态存储单元,语言在计算机中存储数据的方式有两种,第一种方式,是通过全局变量和局部变量来存储;第二种方式,是通过语言的动态存储分配系统来存储。 在第一种方式下,程序员需要定义全局变量或局部变量。在第二种方式下,在程序运行中,当需要存储空间时,向系统申请,使用完毕,还将申请的内存空间退还给系统。 malloc()函数的原型为: void *malloc(unsigned number_
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 分流式二级直齿圆柱齿轮减速器
- 辅音音标发音固定搭配课件-2023-2024学年高中英语初高中衔接
- 专题01 光学(查补知识-通关练)-2024年中考物理复习冲刺过关(解析版)
- 常识高分专项课-中国地理9
- 电子商务环境下税收问题研究
- 2024年河池市巴马瑶族自治县小升初复习语文模拟试卷含答案
- 2024年河北省唐山市迁安市小升初语文高频考点模拟卷含答案
- 2024年新疆维吾尔六年级下学期小升初招生语文试卷含答案
- 承揽加工安装合同
- 离婚协议的义务和权益
- 缅怀革命先烈-弘扬爱国主义精神课件
- 读书分享-精力管理课件
- 中英文科技论文写作考试题库
- 矛盾纠纷排查化解课件
- 双辊破碎机设计
- 2022年小学六年级毕业监测人文素养测试题试卷
- 公司“三定”方案
- 电力施工企业安全生产风险分级管控体系实施指南
- 保险续期收费话术课件
- 危险货物运输停车场管理要求
- 《家庭暴力中的正当防卫问题分析(论文)9500字》
评论
0/150
提交评论