Chinaunix首页 | 论坛 | 博客
  • 博客访问: 191280
  • 博文数量: 76
  • 博客积分: 2231
  • 博客等级: 大尉
  • 技术积分: 826
  • 用 户 组: 普通用户
  • 注册时间: 2011-10-27 09:15
文章分类

全部博文(76)

文章存档

2011年(76)

分类: C/C++

2011-11-25 17:37:17


存储类型
变量的存储类型(storage class)是指存储变量的内存类型。变量的存储类型决定变量何时创建、何时销毁以及它的值将保持多久。
有三个地方可以用于存储变量:普通内存、运行时堆栈、硬件寄存器。
变量的存储类型取决于它的声明位置。
在代码外部
凡是在任何代码块之外声明的变量总是存储于静态内存中,也就是不属于堆栈的内存,这类
变量成为静态(static)变量。对于这类变量,你无法为他们指定存储类型。静态变量在程序运行之前创建,在程序的整个执行期间始终存在。
它始终保持原先的值,除非给它赋一个不同的值或者程序结束。
在代码内部
在代码内部声明的变量的缺省存储类型是自动的(automatic),也就是说它存储与堆栈中,成为自动(auto)变量。有一个关键字auto就是修饰
这种存储类型的,但它极少使用,因为代码块中的变量在缺省情况下就是自动变量。在程序执行到声明自动变量的代码块时,自动变量才被
创建,当程序的执行离开该代码块时,这些自动变量便自行销毁。如果该代码块被数次执行,例如一个函数被反复调用,这些自动变量每次都
将被重新创建。在代码块再次执行时,这些自动变量在堆栈中所占据的内存位置有可能和原先的位置相同,也可能不同。即使他们占据的位置
相同,也不能保证这块内存同时不会有其他的用途。因此,我们说自动变量在代码块执行完毕后就消失。当代码块再次执行时,它的值一般不是
上传执行时的值。
对于在代码内部声明的变量,如果给它加上关键字,可以使它的存储类型从自动变为静态。具有静态存储类型的变量在整个程序执行过程中一直
存在,而不仅仅在声明它的代码块的执行时存在。注意修改变量的存储类型并不表示修改该变量的作用域,它仍然只能在该代码块内部按名字访问。
函数的形参不能声明为静态,因为实参总是在堆栈中传递给函数,用于支持递归。
最后,关键字register可以用于自动变量的声明,提示它们应该存储与机器的硬件寄存器而不是内存中,这类变量成为寄存器变量。
阅读(1384) | 评论(0) | 转发(0) |
0

上一篇:链接属性

下一篇:作用域与存储类型

给主人留下些什么吧!~~