注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Leo

笑:胸怀,傲:实力,才能笑傲江湖。

 
 
 

日志

 
 

C语言中变量和函数的存储类型 编写  

2011-03-07 19:56:39|  分类: 大学留笔 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

        C语言中变量不仅有数据类型,还有存储类型。数据类型用来说明变量所占的存储空间的大小和可以进行的操作,存储类型用来标示变量的生命期和作用域,即变量起作用的范围。在C语言中有4种存储类型关键字:auto、static、extern、register,下面将依次阐述:

        1、auto表示自动变量,通常关键字auto可以省略,自动变量在函数内部定义,因为函数在调用时会把所有参数和其内部的自动变量放在堆栈里(注意:static变量不是定义在堆栈中),存储单元格被分配在内存的动态存储区!在调用结束堆栈将会把所有变量弹出,自动释放这些存储单元,再次调用函数时,系统会为他们另外分配存储单元,变量的值不可能被保留。函数对应的堆栈空间只在调用函数时有效,故在函数内部的自动变量其作用域被限于所在的函数。自动变量用在复合语句中其作用域仅限于所在的复合语句内部,即仅当复合语句被执行时,该变量起作用。

         2、关键字static用在函数定义上表示该函数只在本文件可见,在函数体内部用static来说明一个变量时,称该变量为静态变量,这种变量的值在函数调用结束后不消失而保留原值,即其占用的存储单元不释放,在下一次调用函数时,该变量的值已经存在,就是上次函数调用结束时的值。若在定义变量时没有赋初值,则编译时系统会自动赋值为0.    static用在变量上分两种情况,在一函数内部和在所有函数外,两者作用域不同,前者在函数内部有效,而后者在本文件有效,共同的特性就是存放在静态变量区而不是堆栈,因此每次合法调用时都会使用原来值和保存当前值。

         3、关键字extern用在函数上表示函数全局可见,即可以在别的文件中用extern声明后调用(定义时关键字一般省略,默认为extern除非声明为static)。 extern 用在变量上表示外部变量,用法和函数一样,一般在函数外声明的int x;这种变量均为extern 变量,关键字常省略,只有在其它文件中引用时才必须使用extern声明一下。

         4、register 关键字用于声明寄存器变量,频繁使用的变量声明为register型可以提高程序效率,也可以交给编译器自行优化(编译器一般把循环控制变量存储类型定为register),register类型的变量受处理器寄存器长度的限制,不符合要求的register变量将会被处理成auto型内存变量。 register变量在作用时驻留于处理器的寄存器,故其作用域也只限于相应的函数和复合语句,和auto类似。

         5、变量的缺省初始化:根据以上分析,extern和static声明的变量位于专门分配的内存变量区,而auto变量是在函数执行时定义在堆栈中,故编译时一般把extern和static默认初始化为0值,而auto地址未定编译时无法完成初始化,为不定值。

  评论这张
 
阅读(678)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017