函数中的变量.pptVIP

  • 3
  • 0
  • 约4.36千字
  • 约 38页
  • 2021-12-11 发布于广东
  • 举报
联系方式: 北京源智天下科技有限公司 函数中的变量 第一页,共38页 12.1 生存期和作用域 C程序中的所有变量都有一定的生存期和作用域。生存期是指程序运行时,变量占有内存的时间。变量作用域是指在程序中,变量可以被使用的有效代码区域。本节将讨论变量的生存期和作用域的相关概念,并且介绍全局变量的使用,以及同名变量和变量屏蔽的问题。 第二页,共38页 12.1.1 生存期 生存期是指程序运行时变量占有内存的整个时期。当程序运行到变量的定义语句时,编译器为其分配内存,这是它的生存期的开始;当变量占用的内存被释放时,则标志着生存期的结束。 第三页,共38页 12.1.1 生存期 第四页,共38页 12.1.2 作用域 作用域是指变量可以被使用的代码区域。只有在变量的有效作用域内,变量才是可以被访问的。在变量作用域之外使用变量是非法操作,编译器会对这种行为报告错误。变量可以在main函数内定义,可以在自定义的函数内定义(包括形参),也可以定义在所有函数的外部,还可以在各个函数内部的复合语句中定义。不同位置定义的变量作用域是不一样的。 变量作用域的大小由它所在的程序块决定。如前所述,程序块就是复合函数,也就是在C语言中使用花括号对({})分隔出来的代码块。为了便于讨论变量的作用域,按程序块间的关系将程序块分为4类:本层程序块、上层程序块、下层程序块和外部程序块。分别定义如下。 第五页,共38页 12.1.2 作用域 本层程序块:即程序块本身。 上层程序块:如果程序块A放在程序块B内部,那么B为A的上层程序块;同时,B的所有上层程序块也为A的上层程序块。 下层程序块:如果程序块A内部含有B程序块,那么B为A的下层程序块;同时,B的所有下层程序块都为A的下层程序块。 外部程序块:如果程序块B不是程序块A的以上三种程序块的任何一种,那么B就是A的外部程序块。 第六页,共38页 12.2 局部变量和全局变量 在C语言中,根据变量的作用范围,可以将变量分为局部变量和全局变量两种。两种变量在使用特点和应用中都有很多差别,本章将详细讲解。 第七页,共38页 12.2.1 局部变量 局部变量是指作用域无法涵盖整个代码区的变量。在C语言中,函数体中定义的变量,即函数的内部变量也是局部变量之一。 需要注意的是,由于局部变量的生存期在函数调用完成后就结束,因此每次调用时的局部变量都是新生成的、并拥有不同内存空间的变量。像这种只是临时有效的变量,也称为“临时变量”。作为一个临时变量,局部变量的主要优点是仅在需要时编译器才为之分配内存。这是因为临时变量仅在程序执行到它们被定义的程序块内时才进入生存期。 第八页,共38页 12.2.2 全局变量 与局部变量相对应的,在所有函数外部定义的变量,即所有函数的外部变量,则被称为“全局变量”。实际上,整个C程序可以视为一个程序块,而且是其余所有程序块的上层程序块,而全局变量就是在这个程序块中定义的。因此,全局变量在整个C程序中都是有效力了,作用域为从被定义开始直到整个C程序结束。例如: 第九页,共38页 12.2.2 全局变量 第十页,共38页 12.2.3 初始化全局变量 在C语言中,编译器对全局变量的初始化处理与其余变量不一样。如果局部变量没有被显式地初始化,编译器不会自动为其清理内存;如果全局变量没有为其显式初始化,编译器则会自动初始化,将其内存空间清除归零。内存空间清零的效果相当于:如果变量为int型,则赋值为0;如果变量为float型,则赋值为0.0;如果为int型数组,则将每一个数组元素赋值为0…… 第十一页,共38页 12.2.4 合理使用全局变量 当程序需要在不同的程序块、不同的函数间传递数值信息时,最简单最有效的方式就是使用作用域可以覆盖整个程序的全局变量。但与此同时,大作用域也是全局变量的一大缺点,会导致全局变量的一些使用隐患。 第十二页,共38页 12.2.4 合理使用全局变量 1.过渡使用全局变量会导致资源浪费 全局变量一旦被定义后,就会在整个程序执行过程中一直占有内存空间。而局部变量则只是在一段程序块中占有内存空间。如果毫无顾忌地把所有变量都定义为全局变量,会导致内存资源严重浪费。因为并非所有变量都需要把生存周期放大到整个程序执行过程,完全可以把它们定义为局部变量,在需要用到的地方才使用,使用结束后便释放内存。 第十三页,共38页 12.2.4 合理使用全局变量 2.不宜对全局变量做过多操作 由于全局变量可以在程序中所有程序块中访问,如果访问该变量的操作过多,那么就会给编程和调试带来很大的难度,因为程序员很难确保过多的操作全在控制范围之内。对全局变量进行过多的操作常常是一些程序Bug的源头。 第十四页,共38页 12.2.4 合理使用全局变量 3.不利于模块化设计

文档评论(0)

1亿VIP精品文档

相关文档