C语言第八章.ppt

  1. 1、本文档共24页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C语言第八章

第八章 第八章 变量的存储类型 8.6 函数调用机制 8.7 程序结构 * 8 变量的存储类型 本章介绍变量的存储类型。变量的存储类型确定了变量的存储方式、生命期、作用域。 介绍自动变量、静态变量、外部变量和寄存器变量,及它们之间的区别。 程序在系统中运行时,操作系统为其分配的存储空间可划分为如下的四个区域,每个区域存放不同的数据。函数调用是在公共数据区stack area中建栈完成的。动态内存分配是在heap area中进行分配的。 局部数据 动态数据 全局数据,静态数据 程序代码 Code area Data area heap area Stack area 数据区——全局生命期及作用域、静态生命期及作用域 栈 区 ——局部生命期及作用域 堆 区 ——动态生命期 当数据存放在不同区域时,具有不同的生命期和作用域。 生命期也称为生存期,即标识符在程序运行中的时限。 全局生命期指标识符在程序运行的全过程中存在。 局部生命期指标识符在程序运行的局部阶段存在。 作用域是指标识符在程序中的有效范围。作用域开始于标识符的说明处。 可见性是分析在某一位置标识符的有效性,即表示该标识符在该位置是否可以被调用。它是从另一角度表现标识符的有效性。 标识符的生命期和作用域与标识符在内存中的存储方式密切相关。 8.1自动变量 在函数(模块)内部定义的变量称为自动变量,也称为局部变量。其生命期和作用域均为局部的。即在函数(模块)内可见,作用域为函数内部。 局部变量存放在栈区中,函数被调用时,局部变量 在栈区被分配存储空间,函数调用结束时,局部变量随 之消失,其值不能保存。生命期是在函数调用期间。 局部变量在C中没有缺省初值,未被显式初始化, 其值不确定。 自动变量使用关键字auto表示,通常auto可以省略。迄今为止,在前面已讨论过的程序中,如无特殊说明,使用的变量都是自动变量。 不同函数可以使用同名的局部变量,便于大型软件开发 中的分任务分模块的编程。 例如: void main( ) { int n; /*等价于auto int n; 同名的局部变量*/ //…… } void func( ) { int n; /*等价于auto int n; 同名的局部变量*/ //…… } 8.2外部变量 外部变量是在函数之外定义的变量,也称为全局变量。 具有全局生命期和作用域,程序中的每个函数都是可见的。 外部变量存放在内存的全局数据区。 定义外部变量时,若无显示初始化,编译器将外部变 量初始化为0。 外部变量通常在main( )函数之前定义,一旦被定义可 被后面函数访问。 尽管外部变量是可以在程序任何函数之外定义,但定 义点之前的函数是不可知的。 例如: int func( ); int n=5; void main( ) { int m=n; pritf(“m=%d”,m); pritf(“n=%d”,n); pritf(“n=%d”,func( )); } int func( ) { int s=10; n=s; return(n); } 结果: m=5 n=5 n=10 则main( )函数中语句m=n;无意义,编译错。 若将全局变量n 定义在两函数之间: int n=5; 8.3 静态变量 包括:静态局部变量及静态外部变量。 1. 静态局部变量 静态局部变量也是在函数(模块)内部定义的变量,其作用域与局部变量类似,仅在函数内部可见,但由于存放在data area有固定的存储单元,函数调用结束后,其值得以保存。 关键字为static 静态局部变量与外部变量一样,若未初始化,其值为0。 编译器对静态局部变量仅初始化一次,重复调用保留原值, 不再进行初始化。

文档评论(0)

shuwkb + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档