全局变量与局部变量定义及存储小结

原文:http://blog.csdn.net/grow_mature/article/details/8460455


从变量值的作用区域上区分,可将变量划分为全局变量和局部变量。全局变量从定义变量的位置至源文件的结束均有效。局部变量作用于在本函数范围内。如果在同一个源文件中,外部变量与局部变量同名,则在局部变量的作用范围内,外部变量不起作用。

从变量值的存储类别上区分,可将变量划分为静态存储与动态存储两种。静态存储在整个程序运行期间均具有固定的存储区间,动态存储则是在程序运行期间根据需要动态分配存储空间。在整个程序中,若多次调用同一个函数,则分配给此函数中局部变量的存储空间地址可能不同。整个存储区间类型又可以分为四种:自动变量存储、静态局部变量存储、寄存器变量存储、外部变量存储。

自动变量:函数中的局部变量一般均为动态存储。

静态局部变量:函数中的静态局部变量在函数调用结束后其占用的存储单元并不释放,其对应的变量值保留原值。通过关键词static声明。静态局部变量属于静态存储,在静态存储区间分配存储单元,在整个程序运行期间都不会释放。静态局部变量的赋值是在编译时进行,类似于全局变量,只需要赋初值一次即可。如果没有赋初值,编译时自动赋初值为0(数值型变量)或空字符(字符型变量)。自动变量的赋初值则是在程序运行期间进行的。每调用一次函数相当于执行一次赋值语句。对自动变量而言,因为每次函数调用后存储单元释放,下次调用时会对自动变量进行重新分配存储单元,而分配的存储单元中的值是不确定的,因此自动变量的初值不确定。需要注意的是,即便静态局部变量函数调用结束后仍存在,但因为其为局部变量,其他函数仍不能直接引用此变量。

寄存器变量:一般情况下静态存储或动态存储的变量均存放在内存中,但若局部变量的使用频率特别频繁,则可将此变量的值存放在CPU的寄存器中来提高执行效率。此种变量为“寄存器变量”,使用register作声明。但只有局部自动变量和形式参数可作为寄存器变量,其他(如全局变量)不行。局部静态变量不能作为寄存器变量——不能把变量既放在静态存储区中又放在寄存器中。而且一个计算机系统中的寄存器数目是确定的,不能无限制的使用寄存器变量。现在的编译系统一般可自动识别使用频率较为频繁的变量,从而自动将其放在寄存器中而无需人工优化。因此一般可忽略使用关键字register。

以下为小结:

作用域

存储类别

 

 

 

局部变量

自动变量(动态局部变量,本函数内有效,函数调用结束后消失)

静态局部变量(编译时分配初值,本函数内有效,函数调用结束后值仍保留)

寄存器变量(本函数内有效,函数调用后值消失,一般编译器自动优化)

形式参数可定义为自动变量或寄存器变量

 

全局变量

静态外部变量(仅在本文件内引用有效)

外部变量(其他文件可引用,不过需要添加extern声明或以文件形式)

 


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值