考试首页 | 考试用书 | 培训课程 | 模拟考场 | 考试论坛  
全国  |             |          |          |          |          |         
  当前位置:计算机等级 > 二级考试 > C语言程序设计 > C语言辅导 > 文章内容
  

计算机二级C语言程序设计考点解析:函数

中华IT学院   【 】  [ 2017年6月29日 ]

  7.6局部变量和全局变量

  1.局部变量

  在一函数内部所定义的变量称为局部变量,局部变量只在本函数范围内有效。

  注意:

  ①不同函数可以使用相同的局部变量名,它们将代表不同的对象,互不干扰;

  ②一个函数的形参也为局部变量;

  ③在函数内部,复合语句也可定义变量,这些变量也为局部变量,只在此复合语句中有效。

  2.全局变量

  在C语言中,程序的编译单位是源程序文件,一个源程序文件中包含一个或多个函数。在函数之外所定义的变量称为外部变量,也称为全局变量。全局变量可以被包含它的源程序文件中的其他函数所共用,作用域为从定义变量的位置开始到源程序文件结束,全局变量可以增加函数之间数据的联系。

  注意:当在同一个源程序文件中,全局变量与局部变量同名时,在局部变量的作用范围内,全局变量不起作用,局部变量起作用。

  7.7变量的存储类别、作用域及生存期

  1.变量的存储类别

  在C语言中,有两类存储类别:自动类别及静态类别。

  有4个与两种存储类别有关的说明符:auto(自动)、register(寄存器)、static(静态)和extern(外部),这些说明符一般与类型说明一起出现,一般放在类型名的左边,例如:

  autolongI,j;

  也可写成:

  longautoI,j;

  (1)自动变量:自动变量是C程序中使用最多的一种变量,这种变量的建立和撤消都是在系统中自动进行的。

  格式:[auto]数据类型变量名[=初始化表达式],…;

  上面的说明格式中,方括号中是可省略的部分,auto为自动类别标识符,若省略auto,系统缺省的存储类别也为自动类别。

  注意:函数的形参也为自动类别,在定义时不必加存储类别标识符。

  (2)寄存器变量:寄存器变量与自动变量的性质相同,其区别只在于存储的位置不同,寄存器变量存储在CPU的寄存器中,而自动变量存储在内存中的动态存储区,寄存器变量的存取速度要快些。

  格式:register数据类型,变量名[=初始化表达式],…;

  上面的说明格式中,register为寄存器变量的存储类别标识符。

  说明:

  ①CPU中寄存器的数目是有限的,因此只能把少数的变量说明为寄存器变量;

  ②寄存器变量是存放在寄存器中的,而不是存放于内存中,所以,寄存器变量无地址;

  ③寄存器变量的说明应尽量放在靠近要使用的地方,用完后尽快释放,这样可提高使用效率。

  (3)静态变量:静态类别变量的存储空间在程序的整个运行期间是固定的。

  格式:static数据类型变量名[=初始化表达式],…;

  在上面的说明格式中,static为静态变量的存储类别标识符。

  静态变量的初始化在编译时进行,定义时可用常量或表达式进行显式初始化。对于没有初始化的静态变量,自动初始化为0(整型)或0.0(实型)。

  注意:静态变量具有可继承性,这与自动变量有所不同。

  (4)外部变量:使用extern可使外部变量使用范围扩充到需要使用它的函数。外部变量可作显式的初始化,若不作初始化,系统将自动地初始化为0或0.0。

  格式:[extern]数据类型,变量名[=初始化表达式],…;

  上面的说明格式中,extern使外部变量的作用范围扩大到其他源程序文件中。

  注意:局部变量既可以说明为自动类别,也可以说明为静态类别;全局变量只能说明为静态类别。

  2.变量的作用域及生存期

  在C语言中,变量必须先说明后使用,在程序中一个已定义的变量的使用范围就是此变量的作用域。经过赋值的变量在程序运行期间能保持其值的时间范围为该变量的生存期。

  (1)局部变量的使用域及生存期

  ①自动变量的使用域及生存期

  自动变量的存储单元被分配在内存的动态存储区,每当进函数体(或复合语句)时,系统自动为自动变量分配存储单元,退出时自动释放这些存储单元。自动变量的作用域为从定义的位置起,到函数体(或复合语句)结束为止。

  自动变量在进入到定义它们的函数体(或复合语句)时生成,在退出所在的函数体(或复合语句)时消失,这就是自动变量的生存期。

  使用自动变量的优点是使各函数之间造成信息分隔,不同函数中使用同名变量时不会相互影响。

  ②寄存器变量的使用域及生存期

  寄存器变量的使用域及生存期与自动变量相同。

  ③静态存储类别的局部变量

  在函数体(或复合语句)内部,用static说明的变量静态存储类别的局部变量,这种变量的作用域与自动(或寄存器)变量的作用域相同,但是生存期有所不同。

  在整个程序运行期间,静态局部变量在内存的静态存储区中占据着永久的存储单元,甚至在退出函数后下次再进入函数时,静态局部变量仍使用原来的存储单元。由于不释放存储单元,所以这些存储单元中的值将会被保留下来。静态局部变量的生存期将一直延长到程序运行结束。

  静态局部变量适合于在函数调用之间必须保留局部变量值的独立变量。

分享到:
本文纠错】【告诉好友】【打印此文】【返回顶部
将考试网添加到收藏夹 | 每次上网自动访问考试网 | 复制本页地址,传给QQ/MSN上的好友 | 申请链接 | 意见留言 TOP
关于本站  网站声明  广告服务  联系方式  站内导航  考试论坛
Copyright © 2006-2017 中华考试网(Examw.com) All Rights Reserved  营业执照