首页 百科知识 变量的存储类别

变量的存储类别

时间:2024-09-22 百科知识 版权反馈
【摘要】:变量的存储类别是指变量在内存中的存储方法。C语言系统将变量的存储类别分成了4种:自动变量、静态变量、寄存器变量和外部变量。④自动变量的生存期只限于相应函数或复合语句被执行的过程,若变量是定义在复合语句内,则其生存期为该复合语句被执行的期间。外部变量的定义和说明是不同的。

5.4.2 变量的存储类别

在C语言中,变量和函数有两个属性:即数据类型和存储类别。变量的存储类别是指变量在内存中的存储方法。C语言系统将变量的存储类别分成了4种:自动变量(auto)、静态变量(static)、寄存器变量(register)和外部变量(extern)。

1.自动变量

①出现范围:出现在函数内部。

②判别方法:定义在函数内部并且缺省存储类别说明的变量或在直接用auto显式说明的变量。

③作用域:定义该变量的函数。

④生存期:定义该变量的函数被执行的期间。

前面所谈到的局部变量都是自动变量。

自动变量完整的定义形式如下:

auto 类型说明符 变量名;

注意:

①自动变量一般都会省略auto,函数中的大多数变量都是自动变量。例如:

img280

②形参和复合语句里定义的变量是自动变量。

③自动变量一旦被定义说明,则只能在说明该变量的函数或复合语句中才有效,离开了上述区域则无效。

④自动变量的生存期只限于相应函数或复合语句被执行的过程,若变量是定义在复合语句内,则其生存期为该复合语句被执行的期间。

例5.17

程序如下:

img281

程序运行结果如下:

img282

例5.18

程序如下:

img283

img284

程序运行结果如下:

img285

2.静态变量(static变量)

静态变量分成静态局部变量和静态全局变量。

静态变量的定义形式如下:

static 类型说明符 变量名

(1)静态局部变量。

①出现范围:可以出现在函数内部。

②判别方法:定义在函数内部,并且用static显式说明。

③作用域:定义该变量的函数。

④生存期:整个程序的执行期。

例5.19 用静态变量编程,求1~5的阶乘。

程序如下:

img286

程序运行结果如下:

img287

img288

程序中static int f=1;定义f为静态局部变量,在第一次调用fac函数时,系统对fac函数中的f变量初始化,此时f=1,第一次调用结束时f的值仍为1,调用结束后,由于f是静态变量,它的存储单元不会被释放掉,第二次再调用fac函数时f的值是上一次调用的结果f=1,第二次调用结束后f=2,第三次调用时f=2,调用结束后f=6,依次继续下去,如表5-1所示。

表5-1

img289

注意:

①静态局部变量的作用域在定义该变量的函数内,生存期是整个程序的执行期。要改变该变量的值,必须在定义该变量的函数内部完成,相对于外部变量而言,静态变量更安全,起到了信息屏蔽的作用,因此,静态局部变量的应用比较广泛。

②静态变量初始化语句只在第一次调用该函数时才执行,以后每次调用该函数不再执行初始化语句。

③静态变量如果没有初始化,则系统自动赋初值0或Null。

例5.20

程序如下:

img290

程序运行结果如下:

img291

(2)静态全局变量。

①出现范围:一般出现在函数的外部。

②判别方法:定义在函数外部,并且用static显式说明。

③作用域:从定义该变量的位置直至本源文件结束。

④生存期:整个程序的执行期。

在程序设计中希望某些外部变量只限于被本文件引用,而不能被其他文件引用,这时可以使用静态全局变量。

例5.21

img292

3.寄存器变量(register变量)

①出现范围:出现在函数内部。

②判别方法:定义在函数内部的变量,并且用register显式说明。

③作用域:在定义该变量的函数内。

④生存期:定义该变量的函数被执行的过程。

寄存器变量不是存放在内存里,而是存放在CPU的寄存器里,其特点是存取速度快,如果变量存取很频繁,比如循环变量,则可以定义成寄存器变量以提高程序的执行速度。

寄存器变量的定义形式如下:

register 类型说明符 变量名

注意:

①只有自动变量和函数的形参可以作为寄存器变量。

②静态变量和外部变量不能定义为寄存器变量。

例5.22

程序如下:

img293

程序运行结果如下:

img294

4.外部变量(extern变量)

①出现范围:可以出现在程序中的任何说明部分。

②判别方法:定义在函数外部且无其他显式存储类别说明或直接用extern显式说明。

③作用域:从定义该变量的位置起直到本文件结束。

④生存期:整个程序的执行期。

例5.23

程序如下:

img295

img296

程序运行结果如下:

img297

外部变量是全局变量,前面已经作了详细的介绍,这里不再重复,但有一点必须强调:变量应先定义后使用,但C语言允许外部变量先使用后定义(使用在前,定义在后),但必须在使用之前对该变量进行说明。

外部变量说明的一般形式如下:

extern 类型说明符 变量名;

外部变量的定义和说明是不同的。定义外部变量时系统会为该变量分配存储空间,并且变量的定义只有一次;说明外部变量时系统是不会为它分配存储空间的,并且同一个变量的说明可以出现在多个地方。“说明”的作用只是声明该变量是一个已在后面定义过的外部变量,因为要提前引用所以作说明;外部变量只能在函数外定义,而外部变量的说明可以在函数外部,也可以在函数内部。

例5.24

程序如下:

img298

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈