本文件介绍c++/c语言中的变量得存储类别,在参照谭浩强的c语言教材的基础上,结合自己的c语言学习心得,希望能给在c语言中变量存储类别有疑问的人起到一点启示的作用。
一.C语言中,从变量的作用域角度来分,可以分为全局变量和局部变量。
二.变量值存在的时间角度来分,可以分为静态存储方式和动态存储方式。所谓静态存储方式是指在程序运行期间有系统分配固定的存储空间的方式。而动态存储方式则是在程序运行期间根据需要进行动态的分配存储空间的方式。具体包含4种:自动的(auto),静态的(static),寄存器的(register),外部的(extern)。
1. 自动的(auto)
在调用函数时系统会给他们分配存储空间,在函数调用结束时就自动释放这些存储空间,这类局部变量称为自动变量。
2. 静态的(static)
为了满足局部变量的值在函数调用结束后不消失而且保留原值,既占用的存储单元不释放,就出现了静态的局部变量,用static来声明的局部变量。局部变量的特点:
(1)相对自动变量(即动态局部变量),在程序的运行期间都占用静态存储区,
直到程序结束才释放该存储区。
(2)静态局部变量只是在程序编译时赋初值,以后每次调用时不再重新赋初
值,而只是保留上次函数调用结束时的值。动态局部变量编译时不赋初值,直到程序调用时才给变量赋值,每次调用都要赋初值。
(3)在定义局部变量时不赋初值的话,则对静态局部变量来说,编译时会自动
赋初值0或空字符。而对动态局部变量,不赋初值则它的值是一个不确定的值,因为动态变量每次都要自动分配存储空间,存储空间的值是不固定的。
(4)静态局部变量在函数调用结束后不释放,但其他函数是不能调用的。
3.寄存器的(register)
为了提高程序的执行效率,对一些运算频繁的变量定义为寄存器变量可以节省每次程序执行时的内存读取,大大节省了时间,提高了效率。寄存器的一些特点:
(1)寄存器变量的特点程序运行时分配寄存器存储空间,结束时释放。这个特点限定了只能把局部自动变量和形式参数定义为寄存器变量。
(2)局部静态变量不能定义为寄存器变量。
4. 外部的(extern)
外部变量是在函数的外部定义的全局变量,他的作用是从变量的定义初开始,到本程序文件的末尾。编译时将外部变量分配在静态存储区。
在程序设计中常用到用extern声明外部变量,用来扩展外部变量的作用域。
常用到得方式有:
(1).在一个文件内声明外部变量
定义外部变量,作用域仅限制在从定义处到函数的结束,可以扩展作用范围,用extern声明定义的外部变量。
(2).再多文件的程序中声明外部变量
在程序设计中,可能包含不止一个文件,当两个或者两个以上的文件想共享一个外部变量时,可以在一个文件中定义这个外部变量,在其他文件中用extern声明这个变量,可以完成共享功能。