《全局变量作用域》PPT课件.ppt_第1页
《全局变量作用域》PPT课件.ppt_第2页
《全局变量作用域》PPT课件.ppt_第3页
《全局变量作用域》PPT课件.ppt_第4页
《全局变量作用域》PPT课件.ppt_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

变量作用域和预编译 1 回顾 模块化程序设计 3 递归函数的定义和用途 回顾 模块化程序设计 课程目标 了解变量作用域的概念掌握全局变量与局部变量的区别 重点 掌握变量的存储类别 难点 参考课本P168 P175了解预编译的概念掌握宏的概念及 define的使用 重点 掌握文件包含及 include的使用参考课本P230 P239 2 本次课内容 本次课内容 3 变量的使用范围与存储类型 3 变量的使用范围及其说明方法 4 变量的存储类别及其定义方法 一 变量的使用范围与存储类型 4 变量的使用范围包括有在一个函数内部使用的变量 局部变量 在函数之外部使用的变量 全局变量 main inta b 在一个函数内部定义的变量称为局部变量 局部变量 局部变量 1 局部变量 1 1变量的使用范围 局部变量 5 1 主函数中定义的变量也只用在主函数中有效 2 不同函数中可以使用相同的变量名 且它们代表不同的存储单元 互不干扰 3 形式参数也是局部变量 其它函数是不能调用该形参的 4 在一个函数内部 可以在复合语句中定义变量 这些变量只能在本复合语句中有效 1 1 1关于局部变量使用的几点说明 6 在函数内部 包括主函数 定义的变量 称为局部变量 其作用范围只在函数内部有效 如下代码 includevoidfund1 void intnX 100 局部变量printf nXinfund1 d n nX voidfund2 void intnX 200 局部变量printf nXinfund2 d n nX voidmain void intnX 50 局部变量printf nXinmain d n nX fund1 fund2 程序代码 本例中定义了三个局部变量nX 其作用范围分别作用于fund1 fund和main函数打印结果 nXinmain 50nXinfund1 100nXinfund2 200 示例 局部变量 示例 局部变量 7 charc1 c2 intp 1 q 5 main inta b a p b q 在函数之外定义的变量称为全局变量全局变量可以为本文件中其它函数所共用 它的使用范围 从定义变量的位置开始到本源程序文件结束 全局变量 2 全局变量 1 2变量的使用范围 全局变量 8 1 若在同一个源文件中 如有全局变量与局部变量同名时 则在局部变量的作用范围内 全局变量不起作用 2 设置全局变量的作用是 增加函数间数据联系的渠道 由于同一个文件中的所有函数都能引用全局变量的值 因此如果在一个函数中改变了全局变量的值 就能影响到其它函数 相当于各个函数间有直接的传递通道 关于全局变量使用的几点说明 1 2 1关于全局变量使用的几点说明 9 举例 示例 全局变量 intd 1 main inta 3 fun a d a printf d n d 8 4 8 4 4 示例 全局变量 10 includeintnX 999 全局变量voidfund1 void printf nXinfund1 d n nX voidfund2 void intnX 0 局部变量printf nXinfund2 d n nX voidmain void printf nXinmain d n nX fund1 fund2 程序代码 在此范围中 局部变量nX的作用范围替代了全局变量nX的作用范围 本例中函数fund2中的nX作用范围与全局变量nX有重叠部分 在重叠部分中使用局部变量 屏蔽掉了全局变量打印结果 nXinmain 999nXinfund1 999nXinfund2 0 变量作用范围重叠问题 1 2 2变量作用范围重叠问题 11 数据区 动态 数据区 静态 内存存储区 程序区 用户区 在程序运行期间分配固定的存储空间 如全局变量 只有当函数被调用时才开始分配存储空间 在函数执行结束时就释放这些空间 在程序执行过程中 这种分配和释放是动态的 如局部变量 内存存储区 内存存储区 12 在C语言中 每一个变量和函数有两个属性 数据类型和数据的存储类别 数据类型 如整型 实型等 存储类别 指的是数据在计算机中的存储方式 也可以说数据的存储地点 内存储器 memory 寄存器 CPU 变量的存储类型 1 3 变量的存储类型 13 关键词auto autointb 1 c 2 1 局部变量的存储方式 auto 1 3 1局部变量的存储方式 auto 14 关键词static staticintb 1 c 2 2 局部变量的存储方式 static 1 3 2局部变量的存储方式 static 参见源码 9 1exp0901 15 intf inta autointb 0 staticintc 3 b b 1 c c 1 return a b c main inta 2 i for i 0 i 3 i printf d n f a 0 b 3 c 1 4 7 0 1 5 8 0 6 9 示例 局部变量的存储方式 示例 局部变量的存储方式 16 1 当需要保留函数上一次调用结束时的值 2 如果初始化后 变量只被引用而不改变其值 则这时用静态局部变量比较方便 以每次调用时重新赋值 main inti for i 1 i 5 i printf d d n i fac i 1 12 23 64 245 120 局部变量的用途 1 3 3局部变量的用途 17 全局变量的扩展调用 我们知道一个C语言程序可以有一个或多个源程序文件组成 如果程序是由多个源文件组成时 为了保障某个全局变量能提供多个源文件中的函数调用 则可采全局变量的扩展调用 关键词extern只能用来定义全局变量 3 全局变量的扩展调用extern 1 4全局变量的扩展调用extern 参见源码 9 1exp0902 如果一个函数只能被它所在文件中的其他函数所调用 则称为内部函数或静态函数 如 Staticintfun inta intb 在多文件组成的程序中 如果在一个源程序文件中定义的函数 除了能在本程序内使用 还可以在其他源程序文件中使用 如 Externintfun inta intb 外部函数不用引用头文件 18 内部函数和外部函数 1 4 1内部函数和外部函数 参见源码 9 1exp0903 19 但是 在有些情况下需要某些变量中的值频繁地读写 如某循环变量需要执行10000次循环 显然为了读写变量的值就需要花费许多的时间 因此 为了提高程序的执行效率 在C语言中允许将这些变量的值可以储存在CPU中的寄存器中 需要时可直接从寄存器中读出参加运算 而不必再到内存中去读写 由于寄存器的存取速度远高于内存的存取速度 因此可以提高执行效率 这种变量称为 寄存器变量 关键词register registerinta b intfac intn registerinti f 1 for i 1 i n i f f i return f 4 使用寄存器变量register 1 5使用寄存器变量register 20 运算器 一般情况下 变量 包括静态和动态 的值都是存放在内存中的 当程序中用到哪一个变量的值时 则由控制器发出指令将内存中该变量的值送到运算器中进行运算 之后再将运算结果送回内存中存放 内存 寄存器存储区 了解 1 5 1寄存器存储区 了解 21 1 只有局部自动变量和形参可以作为寄存器变量 5 局部静态变量不能作为寄存器变量 registerstaticinta b c 不能把变量a b c既放在静态存储区中 又放在寄存器中 二者只能居其一 对于一个变量只能定义为一个存储类别 2 对于占用字节数多的变量 如 long float double型变量不能说明为寄存器型变量 3 由于寄存器中的数据可以直接访问 因此比其它存储类别的变量运算速度要快 所以对于反复使用的变量均可作为寄存器变量 4 寄存器型变量都是在某个函数中定义的 所以一旦退出该函数后就会被释放 1 5 2寄存器变量使用的几点说明 22 自动型 auto 内存动态数据区 CPU中的通用寄存器 内存静态数据区 静态型 寄存器型 扩展型 register static extern 内存静态数据区 存储类别标识符表 1 6存储类别标识符表 23 预编译语句是在程序编译之前由编译器进行的源代码处理工作 处理完成后的源代码再进入编译工作 C 语言提供的预编译语句主要有以下三种 宏定义文件包含条件编译 预编译指令均以 号标识 注意 预编译语句 二 预编译语句 24 定义一般形式 define标识符字符串取消宏定义 undef标识符作用 在预处理过程中将源程序中的标识符替换成字符串例 include defineWM Welcom defineUINTunsignedint definePI3 14159voidmain void printf WM UINTna 100 UINTnb 200 doubledbA PI na na 源程序代码 includevoidmain void printf Welcom unsignedintna 100 unsignedintnb 200 doubledbA 3 14159 na na 预编译后的源程序代码 编译预处理 宏定义 define指令 2 1宏定义 define指令 参见源码 exp0904 exp0906 25 文件包含预处理控制有两种形式 include 包含系统标准库文件 include filename 包含自定义文件作用 在预处理过程中用包含文件的内容取代 include命令 例 include include test h voidmain void intna nV doubledba dbV 源程序代码 includeintnV 10 doubledbV 0 5 voidmain void intna nV doubled

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论