存储类和作用域规则

C语言的存储类分为四种,它们是auto自动的,extern外部的,static静态的,register寄存器的。

分程序是由一对花括号扩起来的一段程序,一个函数就是一个分程序,一个复合语句也是一个分程序。C语言中分程序结构允许并列或嵌套。函数可以看成是最外一层并列的分程序,只是它被命名,并可以带参数和具有返回值。

1)      自动变量

C语言规定,在函数(或分程序)内定义的名字只要不加存储类说明,都表示自动的。自动变量的存储空间是这样分配的:当进入一个函数(或分程序)时,系统自动地为该函数(或分程序)定义地自动变量分配存储空间。这样,这个函数(或分程序)中,这些变量是可访问地,当函数(或分程序)执行完毕后,自动变量所占地存储空间被系统自动回收,或者说被自动释放,因而这些变量就不再存在,下次调用该函数时,系统再为这些变量分配存储空间。正是因为这种变量函数(或分程序)的运行而产生,随函数(或分程序)的执行完毕而消失才把它们叫做自动变量。

2)      外部变量

任何函数外部定义的变量都是外部的。外部变量的作用域可以是真个程序,一般来讲,如果没有特殊说明,它的作用域是从定义处到本文件结束。在函数外说明了某些变量后,后面所有函数都可以对它们进行访问,外部变量的值在整个程序运行期间一直保存。

3)      静态变量

静态变量分为内部(自动)静态变量和外部静态变量,在函数中定义的是内部静态变量,在函数外定义的是外部静态变量,内部静态变量的作用域是它所处的函数(或分程序),外部的静态变量的作用域是它所在的文件。

一个内部静态变量的存储形式是这样的:当第一次调用该变量所在的函数时,系统为它分配存储单元,当控制从函数退出时,并不释放静态变量所占的存储单元,其值也仍然保留,下次再调用时,静态变量仍拥有上次调用时留下的值。

外部静态变量的作用域从定义处起知道所在文件的尾部,对其他文件及本文件定义之前的部分都是不可见的,即使加上extern。也就是说它有很不错的隐蔽性。使用外部静态变量可以起到几个函数共享数据,而对其他函数保密的作用。

4)      寄存器变量

计算机中只有寄存器中的数据才能够直接参加运算,而一般变量时放在内存中,变量参加运算时,需要先把变量的值从内存中取到寄存器中,然后计算,再把计算结果回放到内存中取。关键字register,为了减少内存访问,提高运算速度,C语言规定允许定义所谓寄存器变量,即希望寄存器来做变量的存储单元。寄存器变量只能在函数中定义,并只能是int char类型,一般只是使用最频繁的变量才定义成寄存器变量,如循环控制变量等。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值