专升本C语言课件C08存储属性及预处理.ppt

上传人:max****ui 文档编号:10989271 上传时间:2020-04-17 格式:PPT 页数:25 大小:265.31KB
返回 下载 相关 举报
专升本C语言课件C08存储属性及预处理.ppt_第1页
第1页 / 共25页
专升本C语言课件C08存储属性及预处理.ppt_第2页
第2页 / 共25页
专升本C语言课件C08存储属性及预处理.ppt_第3页
第3页 / 共25页
点击查看更多>>
资源描述
C程序设计八存储属性及预处理 八存储属性及预处理8 1变量的存储属性8 1 1变量的作用域变量有两个方面的属性 数据类型和存储类别变量的存储属性指 变量的作用域和生存期 作用域有2种 局部变量 在函数内有效 定义在函数内或形式参数 全局变量 从定义点到文件的结尾有效 定义在函数外 又称外部变量 注意分析作用域时不涉及程序运行的流程 以下哪些是局部变量 哪些是全局变量 判断划线语句是否正确 floatx 6 y main inti i x x j intj fun1 int p inta a i 2 fun2 intb b x j 对错错对 八存储属性及预处理8 1变量的存储属性全局变量的作用 1 可以从函数得到多个返回值 2 简化形参 下面程序采用全局变量得到多个值inta b main swap swap intc c a a b b c 八存储属性及预处理8 1变量的存储属性全局变量的作用 1 可以从函数得到多个返回值 2 简化形参 比较如下的两个程序 采用全局变量可以简化形参 main fun1 a b p fun2 a b p 4 fun1 inta intb int p fun2 inta intb int p intn fun1 a b p inta intb int p main fun1 fun2 4 fun1 fun2 intn fun1 八存储属性及预处理8 1变量的存储属性全局变量的作用 1 可以从函数得到多个返回值 2 简化形参 全局变量的缺点 使函数的通用性降低 程序容易出错 以下的swap函数拿到其他程序中不能用 inta b main swap swap intc c a a b b c 八存储属性及预处理8 1变量的存储属性全局变量与局部变量同名时 全局变量被屏蔽 floatx 6 y main inti i x x j intj fun2 intb x 5 b x j 这时的x是局部变量 八存储属性及预处理8 1变量的存储属性全局变量与局部变量同名时 全局变量被屏蔽 程序分析 inta 1 main inta 7 b 5 fun a b printf d d n a b fun intb b a b a a 2 printf d d n a b 2 127 5 八存储属性及预处理8 1变量的存储属性全局变量与局部变量同名时 全局变量被屏蔽 程序分析 inta 1 main inta 7 b 5 while b 100 b b fun a printf d d n a b fun intb b a b a a 2 return b 9 495 八存储属性及预处理8 1变量的存储属性8 1 2变量的生存期变量有2种生存期 动态存储 在函数被调用时分配空间 函数结束时释放 动态存储变量定义时 初值是不确定的值 静态存储 在编译时被赋初值是0 在整个程序运行时一直存在 静态存储main fun1 fun1 inta a是动态存储的变量 fun2 staticintb a是静态存储的变量 b是静态变量 则不管函数fun2有没有被调用 变量b都会在程序一开始运行时就被定义好了 并且初值是0 八存储属性及预处理8 1变量的存储属性8 1 2变量的生存期 main inti for i 1 i 10 i fun1 fun2 fun1 inta fun2 staticintb 变量a b分别被分配空间几次 a10次b1次 八存储属性及预处理8 1变量的存储属性各种变量的生存期外部变量 静态局部变量 动态局部变量 auto 形参函数调用时分配 并且被赋予实参的值 register寄存器变量速度较快静态static静态局部变量既是局部变量 又是静态变量 判断题 1 只要是局部变量都可以定义为寄存器变量 错 静态局部变量不可以 2 用register定义100变量 其中有些变量将被分配内存单元 对 3 静态局部变量定义时自动赋初值为0对 4 外部变量不可以用auto说明存储类型 对 5 外部变量必然是静态存储的变量 对 6 程序执行到定义静态变量时 该变量被创建 一直到程序结束 错 程序一开始就已创建 八存储属性及预处理8 1变量的存储属性各种变量的生存期外部变量 静态局部变量 动态局部变量 auto 形参函数调用时分配 并且被赋予实参的值 register寄存器变量速度较快静态static静态局部变量既是局部变量 又是静态变量 外部变量 定义在函数的外部intx 动态局部变量 定义在函数内部autointx 或者intx 形参 voidabc intx chary 寄存器变量 定义在函数内部registerintx y z 静态局部变量 定义在函数内部staticintx 八存储属性及预处理8 1变量的存储属性各种变量的生存期外部变量 静态局部变量 动态局部变量 auto 形参函数调用时分配 并且被赋予实参的值 register寄存器变量速度较快静态static静态局部变量既是局部变量 又是静态变量 以下程序的输出的结果是intx 3 main inti for i 1 i x i incre incre staticintx 1 x x 1 printf d x A 33B 22C 26D 25 C 八存储属性及预处理8 1变量的存储属性8 1 3扩展外部变量的作用域用extern声明外部变量 可以扩展外部变量的作用域 1 在一个文件内扩展 在外部变量的定义点之前的函数内 用extern声明外部变量 就可以使用 如externa b 或externinta b 如何在main函数中使用外部变量x main inta a x 4 intx fun1 fun2 externx 八存储属性及预处理8 1变量的存储属性8 1 3扩展外部变量的作用域用extern声明外部变量 可以扩展外部变量的作用域 1 在一个文件内扩展 2 在多个文件扩展 一个C程序可以由多个源文件组成 假如两个文件共用一个外部变量x 必须在一个文件内定义 另一个文件内用extern声明 文件1intx main fun1 文件2externx fun3 x fun2 八存储属性及预处理8 1变量的存储属性8 1 3扩展外部变量的作用域用extern声明外部变量 可以扩展外部变量的作用域 1 在一个文件内扩展 2 在多个文件扩展 一个C程序可以由多个源文件组成 假如两个文件共用一个外部变量x 必须在一个文件内定义 另一个文件内用extern声明 3 限制外部变量只能在本文件使用 定义外部变量时可以用static 这样外部变量就不能被其他文件引用 文件1staticintx main fun1 文件2externx fun3 x fun2 x不能引用 八存储属性及预处理8 1变量的存储属性8 1 3扩展外部变量的作用域用extern声明外部变量 可以扩展外部变量的作用域 1 在一个文件内扩展 2 在多个文件扩展 一个C程序可以由多个源文件组成 假如两个文件共用一个外部变量x 必须在一个文件内定义 另一个文件内用extern声明 3 限制外部变量只能在本文件使用 定义外部变量时可以用static 这样外部变量就不能被其他文件引用 假如一个程序由如下两个文件组成 判断以下使用是否正确 文件1staticinty externz externa intb staticintx 文件2staticinty intz externa intb externx YYNNN 八存储属性及预处理8 1变量的存储属性8 1 3扩展外部变量的作用域用extern声明外部变量 可以扩展外部变量的作用域 1 在一个文件内扩展 2 在多个文件扩展 一个C程序可以由多个源文件组成 假如两个文件共用一个外部变量x 必须在一个文件内定义 另一个文件内用extern声明 3 限制外部变量只能在本文件使用 定义外部变量时可以用static 这样外部变量就不能被其他文件引用 变量x和y有什么区别 staticintx main fun1 staticinty x是外部变量 但不能被其他文件引用y是静态局部变量 只能在本函数使用 八存储属性及预处理8 2内部函数与外部函数外部函数 可以被其他文件调用 格式 extern类型函数名 形参 或类型函数名 形参 内部函数 一个函数只能在本文件中调用 格式 static类型函数名 形参 其他文件调用之前需用extern声明文件1文件2intfun1 inta externfun1 inta b fun1 3 判断题 1 不加extern定义的函数可以被其他文件调用 2 一个文件调用其他文件中的函数时要先声明 3 一个文件用extern声明函数 就可以引用其他文件中的任何函数 4 一个文件中的各个函数要么都可以被其他文件调用 要么都不可以 YYNN 八存储属性及预处理8 3宏定义C语言中的一些操作称为编译预处理 宏定义 文件包含 条件编译 编译预处理是在编译之前进行 预处理命令以 开头 一般不加分号 宏定义有2种 1 不带参数的宏定义 definePI3 1415926 2 带参数的宏定义 defineS u v u v替换时宏和参数都要进行替换 宏替换时不进行语法分析 分析结果 defineMU a b b amain intx 4 y 2 x MU y 2 3 y MU x y 4 printf d y 在运行之前先要进行宏替换x 3 y 2 y y x 4 八存储属性及预处理8 3宏定义宏的优点 1 速度比函数快 2 不受数据类型限制 3 不受返回值个数限制 宏的缺点 1 功能有限 2 源程序变长 3 容易出错 分析结果 defineswap a b a a b b a b a a b main intx 4 y 2 floatu 2 5 v 3 3 swap x y 不受返回值个数限制 swap u v 不受数据类型限制 八存储属性及预处理8 4文件包含将另一个源文件的内容包含到本文件中 include 文件名 先在当前目录找 再到存放库函数头文件的目录中查找 include仅在存放库函数头文件的目录中查找 八存储属性及预处理8 4条件编译条件编译是为了加强程序的可移植性 ifdef标识符程序段1 else程序段2 endif如果之前标识符已被 define定义过 则编译程序段1 否则编译程序段2 definecomputer0 ifdefcomputer defineINTEGER SIZE16 else defineINTEGER SIZE32 endif 八存储属性及预处理8 4条件编译条件编译的优点是代码较短运行稍快 ifdef标识符程序段1 else程序段2 endifif 表达式 程序段1else程序段2两段程序的区别是后者代码较长 八存储属性及预处理8 4条件编译其他形式的条件编译 如果之前标识符没有被 define定义过 则编译程序段1 否则编译程序段2 ifndef标识符程序段1 else程序段2 endif if表达式程序段1 else程序段2 endif如果表达式的值非0 则编译程序段1 否则编译程序段2 defineLETTER0 ifLETTER程序段1 else程序段2 endif
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!