变量的存储类型

来源:百度文库 编辑:神马文学网 时间:2024/04/29 08:54:34
4.5 变量的存储类型
引言
自动变量外部变量静态变量寄存器变量
1.引言
我们知道, 每一个变量都有一个类型。另外, 每一个变量都有一个存储类。变量的存储类是由它被定义的地方决定的, 并且, 如果用了关键字, 则还要由关键字决定。有四个关键字描述存储类: extern, auto, static 和 register。
存储类决定了两件事, 第一, 它控制哪些函数可以访问一个变量,第二, 存储类决定了变量在内存中的时间。
返回页首
2.自动变量
在一个函数中说明的变量, 其类型缺省为自动类的。然而, 你可以用关键字 auto 来清楚地表示:
main()
{
auto int plox;
....
一个自动类变量是局部范围的。仅仅定义此变量的函数知道此变量。其它函数可以有同一名字的变量, 但它们是独立的变量, 并且可能存储在不同的内存位置。
现在, 我们看一个例子:
',1)">
返回页首
3.外部变量
在一个函数外部定义的变量是外部的。一个外部变量也必须在用到它的函数中说明后才能使用; 这可以用extern显式地说明, 也可由上下文隐含地说明。一个外部变量在程序运行时都存在, 而不是限制在某个函数中。
说明如下:
/* 三个外部定义的变量 */
int errupt ;
char coal;
double up;
main()
{
/* 说明那三个外部定义的变量 */
extern int errupt;
extern char coal;
extern double up;
....
有两种情形, 你必须在使用一个外部变量之前先用关键字 extern 说明它 。
情形 1: 如果你在一个文件中, 要在一个外部变量的定义之前使用它, 那么你必须在用之前先用 extern 来说明它。看一个例子:
try()
{
extern int i;        <--- i必须先用
i=i+5;
...
}
...
int i;                     <---i在后面定义
情形 2: 如果不在一个文件中,如 FILE1 和 FILE2 是两个不同的文件。我们想在 FILE1 用变量 i (它的类型是 int), 但它是在 FILE2 中定义的。我们必须在 FILE1 中说明 i : extern int i;
只要 extern 的说明的最初定义是在同一个文件中, 并且是在使用它的函数之前, 就可以忽略它。
这里有一个例子:
/* 定义一个外部变量 */
int hocus ;
main()
{
/*hocus 没有说明 */
hocus++ ;
/* hocus 是外部的尽管它在 main()函数中没有被显式的说明。*/
....
/* hocus 是 1auto 类型的 */
int hocus ;
...
返回页首
4.静态变量
在 C 语言中, 有一种特殊的变量: 静态变量。
你可以如下方式说明:
main()
{
...
static int i;
...
}
现在, 我们看一个例子:
',2)">
返回页首
5.寄存器变量
通常变量是存在计算机内存中的。幸运的话, 寄存器变量被存在 CPU 的寄存器中, 在寄存器中可以比在内存中更快地访问和操作变量。在其它方面, 寄存器变量和动态类变量几乎一样。
按这种方式设置寄存器变量:
main()
{
/* i是普通变量 */
int i;
/* j是寄存器变量 */
register int j;
.. .
如果得不到寄存器, 寄存器变量变成了普通的自动类变量。访问 j 比访问 i 快多了!