- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第四章 变量存储类型 目 录 4.1 变量存储类型概述 4.2 自动型变量 auto 4.3 寄存器型变量 register 4.4 静态型变量 static 4.5 外部型变量 extern 4.1 变量存储类型概述 C语言变量、函数都有2个属性:数据类型和存储类型。 数据类型:用于说明变量/函数返回值所占用(所分配)的 内存空间。 存储类型:用于规定变量或函数返回值的作用域和生存 期。 作用域 作用域定义:能访问变量的程序代码范围。 如果一个变量在某源程序文件或某函数范围内有效,则 称该文件或函数为该变量的作用域。 从作用域出发,C语言有 2 类变量: 局部变量:仅在函数内部或复合语句内部有效; 全局变量:从定义处开始到本文件结束皆有效。 4.1 变量存储类型概述 生存期 生存期定义:指变量在内存中存在的时间范围。 从生存期出发,C语言有 2 类变量: 静态变量:变量在整个程序的运行时间都存在。 动态变量:变量只在某个函数的执行过程中才存在。 C语言的存储类别有四种: auto、static、register 和 extern。 存储空间的划分 程 序 区:用于存放程序编译后形成的可 执行代码(执行时装入) 全局数据区:用于存放程序中的全局/静态 数据; 堆 区:存放程序的动态数据; 栈 区:存放程序的局部数据。如函数 形参、局部变量、函数调用时 的现场保护和返回地址等。 静态数据 在全局数据区中分配存储单元并在程序执行过程 中始终占用该单元,直到程序结束才释放; 动态数据 在函数开始执行时分配动态存储空间,函数结束 时释放这些空间。动态数据保存在栈区中。 程序区 全局数据区 堆 区 栈 区 程序将操作系统分配给其运行的内存块分成四个区域: 定义:在函数内部定义的变量。 函数中的自动变量,如不做专门的声明,都是动态分配 存储空间,并存储在动态存储区中;用关键字auto作存储类 型的声明,这类变量亦称为局部变量。 语法:auto 数据类型 变量列表; 数据类型 变量列表; auto int b, c=3; auto float f; int b, c=3; float f; 通常auto被省略,不写即隐含确定为“自动存储类”。 自动变量的作用域局限于定义它的程序块(函数/复合语句)。其作用域从定义它的地方开始,到同一层的右花括号结束。 4.2 自动型变量 auto 自动型变量只在定义它的函数或复合语句被调用/执行时,系统才对其分配内存空间,生存期至此开始。当结束函数调用或执行完复合语句后,系统即回收相应的内存空间。 【例】 int f1(int a) { int v1, x; …… } int f2(void) { int v2, x, y; …… } void main(void) { int m, y; …… } a、v1、x的有效范围 v2、x、y的有效范围 m、y的有效范围 每进入一次函数体或复合语句,赋一次指定的初值。 自动变量不保留上次调用时的运行结果。 【注】 ① 主函数main中定义的变量只在主函数中有效,其它函数 不能引用; ② 不同函数中可以使用相同名字的变量,它们代表不同的 对象,占用不同的内存单元,互相独立; ③ 形式参数也是自动变量; ④ 可在复合语句中定义自动变量,其作用域只是本复合语 句。 ⑤ 内层的自动变量,自动暂时“屏蔽”外层的同名变量。 4.2 自动型变量 auto void main(void ) { int a, b; …… { int c;
文档评论(0)