变量的作用域和生存期

变量的作用域:即变量的作用范围(有效范围)。

表现为变量有的可以在整个程序或其他程序中进行引用,有的则只能在局部范围内引用。

按其作用域范围可分为 局部变量全局变量

变量的生存期:变量从生成到被撤销的这段时间。实际上就是变量占用内存的时间。

按其生存期可分为 动态变量静态变量

变量只能在其生存期内被引用,而变量的作用域直接影响变量的生存期。

 

局部变量的作用域和生存期

在函数内部作定义说明的变量,也成内部变量仅限于函数内

生存期是从函数被调用的时刻到函数返回调用处的时刻(静态局部变量除外)。

注意

①主函数main()中定义的变量也是局部变量,其他函数不可以使用,同样main()函数中也不可以使用其他函数中的

②形参变量属于被调用函数的局部变量;实参变量则属于全局变量或调用函数的局部变量。

③允许在不同的函数中使用相同的变量名,他们代表不同的对象,分配不同的单元,互不干扰,也不会混淆

④在复合语句中定义的变量也是局部变量,生存期一样。

 

全局变量的作用域和生存期

在函数外部作定义说明的变量。也称为外部变量。它不属于哪一个函数,而是属于一个源程序文件。

作用域:从定义变量的位置开始到本源文件结束,及有extern说明的其他源文件。不可以在定义之前使用

生存期:与程序相同。从程序执行开始到之行结束。

说明

Ⅰ.尽量少使用全局变量

①全局变量在程序全部执行中始终占用存储单元

②降低了函数的独立性、通用性、可靠性及可移植性。

③降低程序清晰型、易出错。

Ⅱ.若全局变量与局部变量同名,则全局变量被屏蔽。要引用全局变量,须在变量名前加上两个冒号(::)

Ⅲ.全局变量定义须在所有的函数之外,且只能定义一次,可赋初始值。

一般形式:  extern 类型说明符 全局变量名1[ = 初始值],....,全局变量名n[ = 初始值n]; //extern可不要

Ⅳ.对全局变量进行说明,可扩展全局变量的作用域。全局变量的说明一定要加extern 且不可以赋初始值

Ⅴ.全局变量的定义和全局变量的说明区分。定义可以赋初始值,说明不可以。但是,

void gx(), gy();

void main()

{

   extern intx, y; //全局变量说明

 printf("1:x=%d\ty=%d\n", x, y);

   y = 246;

   gx();

   gy();

}

extern int x, y; //全局变量说明

void gx()

{

   x = 135;

   printf("2:x=%d\ty=%d\n", x, y);

}

int x = 0, y = 0; //全局变量定义

void gy()

{

   printf("3:x=%d\ty=%d\n", x, y);

}

变量的存储类型

变量是对程序中数据的存储空间的抽象。

变量的属性:①数据类型:变量所持有的性质,规定了取值范围和可参与的运算 

②存储类型:存储方式。规定了变量占用内存空间的方式。分为静态存储和动态存储

静态存储类型的变量:在程序运行中系统分配固定的内存单元,并一直保持不变,直至整个程序结束,内存空间才被释放。

全局变量就是静态存储

动态存储类型的变量:在程序运行期间根据需要进行动态分配内存单元,使用完毕立即释放。例如函数的形参

在C语言中,对变量的存储类型说明有以下四种:auto--自动型 register--寄存器型 static--静态型 extern--外部型

变量定义的完整形式:存储类型说明符 数据类型说明符 变量名1,变量名2,..变量名n;

在函数外部没有定义类型的变量都是静态变量,

auto自动型变量不可以定义在函数外部,只能在函数内部,在函数内部,默认是auto

extern全局变量可以在另外一个文件中调用 static不可以。

寄存器变量 register属于动态存储变量。只有局部自动变量和形式参数才可以定义寄存器变量。register是过时的修饰符

 

函数的作用域

内部函数和外部函数

内部函数 只能在本文件调用 加上static即可

外部函数 作用域整个源程序  加上extern  缺省是默认是extern

 

 

 

 

 

 

 

 

 

 

  • 18
    点赞
  • 114
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值