第13讲 变量的存储类别.ppt_第1页
第13讲 变量的存储类别.ppt_第2页
第13讲 变量的存储类别.ppt_第3页
第13讲 变量的存储类别.ppt_第4页
第13讲 变量的存储类别.ppt_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

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

文档简介

第13讲变量的存储类型 内部和外部函数 一 变量的存储类型1 自动变量2 静态变量3 寄存器变量4 外部变量二 内部函数和外部函数1 内部函数2 外部函数 数据类型 指变量的名称 类型 取值范围和占据存贮空间的大小 如整型 实型 字符型等 变量定义的一般形式 存储类型数据类型变量名称 说明 存储类型可以是auto static register和extern 一 变量的存储类型 方式 对变量的定义需要给出下面两方面的属性 存储类型 变量存在的时间 生存期 作用范围和在硬件中存放的地点 区域 1 自动变量 用关键字auto作存储类型说明的局部变量 包括形参 称为自动变量 变量的生存期为定义它的函数 main intx y inthanshu autointa autointb c d C语言规定 在局部变量的定义中 可省略关键字auto 即 没有指明存储类别的变量 一律隐含为自动变量 例如 2 外部变量 用关键字extern作存储类型说明的变量称为外部变量 外部变量与全局变量是对同一类变量的两种不同角度的提法 全局变量是从作用域的角度 用来表示变量的作用范围 而外部变量是从变量是从存储类型的角度提出的 用来表示变量的生存期 C语言规定 1 对共用的外部变量可以在任一源文件中定义一次 其他源文件中用extern对其声明后 即可使用 3 外部变量的声明可以有多次 其位置在定义点之前任意处 不需要分配存储空间 4 外部变量的定义只有一次 其位置只能在函数外 并可对外部变量分配存储单元 初始化 2 如果希望某些外部变量仅限于本文件使用 则在定义外部变量时前面加一个static说明 称为静态局部变量 includeintmax inta intb intc c a b a b returnc voidmain externx y 声明外部变量 printf d n max x y intx 12 y 8 定义外部变量 例1外部变量使用举例 在同一源文件内 程运行结果 12 注意 如果省略了主函数中的外部变量声明 程序将出现编译错误 违法了变量先定义后使用的规则 文件1 f1 cpp include include c user f2 c intx 定义外部变量main inta 3 b 4 x a printf d n pow1 b 例2外部变量使用举例 在两个文件中 求ab 文件2 f2 cexternintx 声明外部变量 intpow1 intn inti y 1 for i 1 i n i y y X returny 程运行结果 81 3 静态变量 用关键字static作存储类型说明的局部变量称为静态变量 inthanshu inta staticintb c d 静态变量存放在静态存储区 一旦为其分配了存储单元 它们在整个程序执行期间将固定地占用这些存储单元 即 变量的生存期为整个程序 includevoidf intn autoints 10 auto可省略s s 1 printf s d n s voidmain intn for n 1 n 4 n f n 程运行结果 s 11s 11s 11 例1写出下面程序的执行结果 自动变量的生存期 includevoidf intn staticints 10 静态变量s s 1 printf s d n s voidmain intn for n 1 n 4 n f n 程运行结果 s 11s 12s 13 例2写出下面程序的执行结果 静态变量的生存期 自动变量和静态局部变量区别 区别1 自动变量的值在函数调用结束后不再保留 下次调用时丢失了原有的值 因此 每次调用函数时 都要初始化 静态局部变量在函数调用结束后 仍然保留上次调用结束时的值 存在但不一定能使用 因此 只有在第1次调用函数时才初始化 区别2 自动变量在函数中如果不初始化 它的初值为一个不确定的值 静态局部变量在函数中如果不初始化 它的初值为0 includevoidf autoints auto可省略s s 1 printf s d n s voidmain intn for n 1 n 4 n f 程运行结果 s s s 例3写出下面程序的执行结果 自动变量未初始化 includevoidf staticints 静态变量s s 1 printf s d n s voidmain intn for n 1 n 3 n f 程运行结果 s 1s 2s 3 例4写出下面程序的执行结果 静态变量的未初始化 includevoidf staticints 10 静态变量s s 1 printf s d n s voidmain f printf s d n s 例5指出下面程序中的错误 错误 变量s不能在主函数中使用 请特别注意 区分静态变量的生存期和作用域 4 寄存器变量 用关键字register作存储类型说明的局部变量 其作用是加快速度 寄存器在CPU中 其余的变量存放在内存中 说明 1 寄存器变量只能是局部自动变量和形式参数 2 寄存器变量的分配方式是动态分配的 3 由于CPU中的通用寄存器数目有限 通常只把少数使用频繁的变量定义为寄存器变量 对超出寄存器数目的寄存器变量作一般自动变量处理 includeintfac intn registerinti f 1 定义i f为寄存器变量 for i 1 i n i f f i returnf main intk for k 1 k 5 k printf d d n k fac k 例求n 的函数 includeintfunc inta intb intc c a b returnc voidmain intx 6 y 7 z 8 r r func x y x y z printf r d n r 提示 主函数中的表达式 x y x y的值为13 例写出下面程序的执行结果 程运行结果 r 21 includeintfunc inta intb staticintm 0 i 2 i m 1 m i a b returnm voidmain intk 4 m 1 p p func k m printf p d n p p func k m printf p d n p 程运行结果 p 8p 17 例写出下面程序的执行结果 静态变量的生存期 includeintf2 inta intb a b returnb intf1 intx inty intn 0 b 0 staticinta 0 a a x b b y f2 a b printf d d d n n a b returna voidmain intn 1 a 2 b 3 i for i 0 i 2 i a f1 a b b f2 a b printf d d d n n a b 程运行结果 0 2 31 2 40 4 41 4 5 例写出下面程序的执行结果 二 内部函数和外部函数 1 内部函数如果一个函数只能被本文件中其它函数调用 它称为内部函数 定义格式 static类型标识符函数名 形参表 2 外部函数 可以被其它源程序调用的函数定义格式 extern类型标

温馨提示

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

评论

0/150

提交评论