第4章 变量的存储类型.ppt_第1页
第4章 变量的存储类型.ppt_第2页
第4章 变量的存储类型.ppt_第3页
第4章 变量的存储类型.ppt_第4页
第4章 变量的存储类型.ppt_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

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

文档简介

第4章变量的存储类型 4 1概述4 2自动型变量 auto 4 3寄存器型变量 register 4 4外部参照型变量 extern 4 5静态型变量 static 4 6存储类型小结 4 1概述 C语言中的变量具有两种属性 根据变量所持有数据的性质不同而分为各种数据类型根据变量的存储方式不同而分为各种存储类型 变量的数据类型决定了该变量所占内存单元的大小及形式 变量的存储类型规定了该变量所在的存储区域 因而规定了该变量作用时间的长短 即寿命的长短 这种性质又称为 存在性 变量在程序中说明的位置决定了该变量的作用域 即在什么范围内可以引用该变量 可引用 又称为 可见 所以这种性质又称为 可见性 几个概念 作用域 是该变量在其上有定义的程序部分 变量的生存期 变量从定义开始到它所占有的存储空间被系统收回为止的这段时间 3变量的可见性的含义 在某个程序区域 可以对变量进行访问 或称存取 操作 则称该变量在该区域为可见的 否则为不可见的 再引入几个概念 1 全局变量和局部变量在一个函数内部或复合语句内部定义的变量叫内部变量 又称为 局部变量 在函数外定义的变量称为外部变量 又称为 全局变量 2 动态存储变量和静态存储变量在程序运行期间 所有的变量均需占有内存 有的是临时占用内存 有的是整个程序运行过程中从头到尾占用内存 对于在程序运行期间根据需要进行临时性动态分配存储空间的变量称为 动态存储变量 对于在程序运行期间永久性占用内存的变量称为 静态存储变量 一个正在运行的程序可将其使用内存的情况分为如下三类 如右图 程序代码区 程序的指令代码存放在程序代码区 静态存储区 静态存储变量存放区 包括全局变量 动态存储区 存放局部自动变量 函数的形参以及函数调用时的现场保护和返回地址等 变量定义的一般形式为 数据类型变量名表 存储类型包括 auto自动型register寄存器型extern外部参照型static静态型 4 2自动型变量 auto 1 定义自动变量用关键字auto作存储类型声明如 1 voidmain autointx y autofloatz 在主函数内定义了自动型int变量x y和自动型float变量z 在定义自动型变量时auto可缺省 2 if x y inti for i 0 i 10 i intj 在条件判断后的那个复合语句中定义了一个自动型int变量i 在for循环后的那个复合语句中定义了一个自动型int变量j 2 作用域及寿命 由于自动型变量只能作内部变量 所以自动变量只在定义它的函数或复合语句内有效 即 局部可见 变量的作用域是指该程序中可以使用该变量名字的范围 对于在函数开头声明的自动变量来说 其作用域是声明该变量的函数 不同函数中声明的具有相同名字的各个局部变量之间没有任何关系 例4 1 includevoidmain intx 5 auto缺省 1 printf x d t x if x 0 intx 10 2 printf x d t x printf x d n x 2 运行结果 x 5x 10 x 7 例4 2下面的例子说明了自动变量的特性 includevoidfunc voidfunc autointa 0 printf aoffunc d n a voidmain inta 10 func 调用func 函数printf aofmain d n a func 调用func 函数func 调用func 函数 该程序的输出结果为 aoffunc 1aofmain 11aoffunc 1aoffunc 1 例4 3下面的程序说明自动变量的初始化和作用域程序如下 includeintn voidshow voidshow autointi 3 n i printf inputthevalue n di d n n i autointi 10 i printf nowthevaluei d n i printf thenthevaluei d n i voidmain autointi autointn 1 printf atfirstn d n n for i 1 i 3 i show printf atlastn d n 程序运行结果 atfirstn 1inputthevalue n 1i 4nowthevaluei 11thenthevaluei 4inputthevalue n 2i 4nowthevaluei 11thenthevaluei 4atlastn 1 4 3寄存器型变量 register 1 定义在函数内或复合语句内定义 例如 voidmain registerinti for i 0 i 100 i 寄存器型变量存储在CPU的通用寄存器中 因为数据在寄存器中操作比在内存中快得多 因此通常把程序中使用频率最高的少数几个变量定义为register型 目的是提高运行速度 从而节省了大量的时间 大大加快了程序的运行速度 2 分配寄存器的条件是 有空闲的寄存器 变量所表示的数据的长度不超过寄存器的位长 3 作用域和寿命同auto类型 也是在定义它的函数或复合语句内有效 即 局部可见 例4 4用寄存器变量提高程序执行速度 include 函数的形参也可以指定为寄存器变量 一个函数一般以拥有2个寄存器变量为宜 defineT10000voiddelay1 voiddelay2 voiddelay1 registerunsignedi 0 for i T i voiddelay2 unsignedi for i 1 i T i voidmain unsignedinti printf a调用delay1 第一次延时 n for i 0 i 60000 i delay1 printf a第1次延时结束 n调用delay2 第 2次延时 n for i 0 i 60000 i delay2 printf a第2次延时结束 n 该程序运行结果为 调用delay1 第一次延时 第1次延时结束 调用delay2 第2次延时 第2次延时结束 4 4外部参照型变量 extern 1 定义 extern型变量一般用于在程序的多个编译单位之传送数据 在这种情况下指定为extern型的变量是其它编译单位的源程序中定义的 它的存储空间在静态数据区 在程序执行过程中长期占用空间 要访问另一个文件中定义的跨文件作用域的全局变量 必须进行extern说明 2 作用域及寿命 全局存在 全局可见 例如 file1 c file2 c file3 c externintx externintx intx 0 voidmain voidfun1 voidfun2 x x 3 printf d x file1 c和file2 c中的externintx 告诉编译程序X是外部参照变量 应在本文件之外去寻找它的定义 所以上面的x虽在两个源文件中 但它们是同一个变量 在文件之外的file3 c中 定义了intx 0 即为它们调用的变量 例4 5下例说明了外部变量的特性 includeintn 100 voidhanshu voidhanshu void n 20 intmain void printf n d n n for n 60 hanshu printf n d n n return0 执行结果 n 100 n 80 n 60 n 40 例4 6用extern声明外部变量 本程序的作用是给定b的值 输入a和m 求a b 和a的值 文件file1 c中的内容为 includeinta intm intpower voidmain intb 3 c d printf inputthenumberaandits powerm n scanf d d 文件file2 c中的内容为 externinta externintm intpower inti y 1 for i 1 i m i y a return y 该程序的运行结果为 inputthenumberaanditspowerm 5 4 输入5 3 15 输出5 4 625 4 5静态型变量 static 1 定义静态型变量既可以在函数或复合语句内进行 也可以在所有函数之外进行 在函数或复合语句内部定义的静态变量称为局部静态变量 在函数外定义的静态变量称为全局静态变量 例如 staticfloatx 定义x全局静态变量 voidmain staticinty 定义y局部静态变量 2 作用域和寿命 static类型变量都是全局寿命 全局static变量全局可见 局部static变量局部可见 例4 7考察静态变量值 includeinta 2 intf intf autointb 0 staticintc 3 b c return a b c voidmain inti for i 0 i 3 i printf d t f 运行结果为 789 例4 8下面的程序说明外部静态变量和外部变量的区别文件file1 c如下 includestaticfloatx floaty floatf2 floatf1 floatf1 return x x voidmain x 500 y 100 printf f1 f f2 f n f1 f2 文件file2 c如下 externfloaty floatf2 return y y 输出 fl 250000 000000 f2 10000 000000 例4 9局部静态变量与自动变量的区别 includevoidvalue voidvalue intau 0 staticintst 0 printf au variable d st variable d n au st au st voidmain inti for i 0 i 3 i value 程序运行结果 au variable 0 st variable 0au variable 0 st variable 1au variable 0 st variable 2 4 6存储类型小结 1 关于类型说明关键字auto static register用于定义变量的存储类型说明 其中auto通常缺省 而关键字extern则不然 它不是用于定义变量而是用于说明某个变量 是已在本函数之外或其它源文件中定义过的外部变量 加extern说明有 延伸外部参照型变量作用域 的作用 2 关于变量的作用域和寿命 3 关于变量的初始化有关变量初始化的知识 在前面有关章节已讲述过 此处只对各种存储类型变量在初始化方面的区别加以总结 1 对于auto型和register型变量 由

温馨提示

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

评论

0/150

提交评论