- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第12章变量的作用域和存储类 变量的作用域 局部变量 内部变量---局部变量 定义:在函数内定义,只在本函数内有效 说明: main中定义的变量只在main中有效 不同函数中同名变量,占不同内存单元 形参属于局部变量 可定义在复合语句中有效的变量 局部变量可用存储类型:auto register static (默认为auto) 局部变量说明 全局变量 4. 不在作用域内函数。若使用全局(外)变量,需在函数体内加上extern保留字。 5. 全局和局部变量同名时,局部变量有效。 6. 使用全局变量太多,会降低程序的可读性。在程序执行时,人们很难清晰地判断每一时刻各外部变量的值。因为每个函数都可改变全局变量的值。即增加了调试的困难。 变量的存储类别------动态变量与静态变量 动态变量:动态存储类别的变量当进入定义它的函数或复合语句时被分配存储空间,当离开时所占内存空间被释放。 静态变量:静态存储类别的变量在源程序编译的时候被分配固定的存储空间,从程序开始执行到程序运行结束,一直占用该内存空间,直至程序运行结束,才被释放内存空间。 注: 声明时,auto可省略,省略时,默认auto型。 自动变量是局部变量,作用域同于局部变量。 自动变量是动态存储类型的变量。 寄存器变量—register 注: ⒉ 一个计算机系统中的寄存器数目是有限的,不能定义任意多个寄存器变量。不同的系统允许使用的寄存器不同。 3. 由于寄存器不参加内存编址,因而对寄存器变量不能使用运算符。 4. 寄存器变量特别适用于要求快速和频繁使用的场合,例如:循环控制变量、数组的下标、动态数据结构中用于查询的指针等。 静态变量 局部变量的存储类别 局部变量的作用域是定义它的函数或复合语句。局部变量的存储类别是指它存放的位置。局部变量可存放于内存的动态区,寄存器和内存的静态区。但无论内部变量存放在何处,它的作用域是不变的。 局部变量既可以静态方式 , 又可以动态方式存储。 外部变量的存储类别 外部变量只能存放在内存的静态存储区 。它在整个程序的运行期间一直占用内存单元。 外部变量的作用域可以通过关键字“extern”来扩展。(扩展至某个文件,甚至被其它源程序文件使用) 用static声明的外部变量能够限制它的作用域的扩展,达到信息隐蔽的目的。 变量存储类型 该类型变量的存储空间不是内存,而是cpu中的寄存器,因而称为寄存器变量。 定义 为了提高访问速度,将经常使用的变量定义在 cpu中的寄存器,提高系统效率。 原因 ⒈ 只有局部自动变量和形参可以作为寄存器变量,其他 ( 如全局变量、局部静态变量)不行。并且寄存器变量一般只限于整形、字符型和指向整形、字符型的指针。 register static int a, b, c; register float x, y; 注: 下次再调用该函数时,static变量仍使用原来的存储单元,仍使用原来存储单元中的值。 分配内存后、赋初值,并且只被赋初值一次,未赋值的内部static变量,系统自动给它赋值为0。 static变量在内存的静态存储区占用的固定的内存单元;即使它所在的函数被调用结束后,也不释放存储单元,它所在单元的值也会继续保留-----因此: 虽然static变量在整个程序运行期间都是存在的,但在它的作用域外,它是不可见的,也就是说其它函数是不能引用它的。 ? 若定义时赋初值,则程序运行中仅在第一次调用时赋初值,第二次调用不再赋初值,而是使用上一次调用的值。 则: a, b存入静态区。 函数中的a, b始终占据固定存储单元。 静态方式: static int a, b; 现在, 我们看一个例子: 被分配在内存的静态存储区中。 main() { void increment(void); increment(); increment(); increment(); } void increment(void) { int x=0; x++; printf(“%d\n”,x); } 例 局部静态变量值具有可继承性 运行结果:1 1 1 main() { void increment(void); increment(); increment(); incremen
您可能关注的文档
最近下载
- 标准图集-14J938-抗爆、泄爆门窗及屋盖、墙体建筑构造.pdf VIP
- JG_T196-2018:钢板桩实施规范.pdf VIP
- 2025新教材培训:新修订小学道德与法治统编教材的变化.docx VIP
- 沪教牛津版小学一至六年级英语单词汇总.pdf
- 2025年高考语文复习知识清单第七章古代诗歌鉴赏专题04:鉴赏诗歌表达技巧(学生版+解析).docx VIP
- (16)物体打击事故现场处置方案.docx VIP
- 2025年山西航空产业集团有限公司招聘考试笔试试题(含答案).docx
- 南航理论力学课件.pdf VIP
- 提高患者术前准备完善率医院护理品管圈QCC成果汇报.pptx VIP
- 免疫检查点抑制剂肾脏不良反应管理共识解读PPT课件.pptx VIP
文档评论(0)