首页 理论教育 C语言程序设计(第3版):内部变量存储方式

C语言程序设计(第3版):内部变量存储方式

时间:2023-11-23 理论教育 版权反馈
【摘要】:在复合语句中定义的自动变量,其生存期为该复合句被执行期间。自动变量与静态内部变量的存储特性示例。为了提高执行效率,C语言允许将内部变量的值存放到寄存器中,这种变量就称为寄存器变量。对寄存器变量的实际处理,随系统而异。一般将函数中使用频率最高的变量定义为寄存器变量,以此提高程序的执行效率。

C语言程序设计(第3版):内部变量存储方式

1.静态存储——静态内部变量

1)定义格式

static 数据类型 内部变量表;

2)存储特点

(1)静态内部变量属于静态存储,是在编译时为其分配存储单元的,其生存期为整个程序执行期间。在程序执行过程中,即使所在函数被调用结束也不释放,一直存在。但其他函数不能引用它们。

(2)静态内部变量是在编译时赋初值的,若只定义而不初始化,则自动赋以“0”(整型和实型)或“\0”(字符型),也即系统会自动初始化为“0”值。每次调用静态内部变量所在的函数时,不再重新赋初值,只是保留上次调用结束时的值。

【例6.17】输出1~4的阶乘。

程序运行结果如下:

3)应用说明

(1)当需要保留函数上一次调用结束时的值时,应使用静态内部变量。如例6.17所示。

(2)当变量定义并初始化后只被引用而不改变其值时,也可以使用静态内部变量,以避免每次调用时重新赋值

(3)由于静态内部变量的作用域与生存期不一致,降低了程序的可读性,因此,除非对程序的执行效率有很大提高,一般不提倡使用。

2.动态存储——自动局部变量(又称自动变量)

1)定义格式

[auto] 数据类型 自动变量表; /*关键字“auto”可缺省*/

2)存储特点(www.xing528.com)

(1)自动变量属于动态存储方式,是在函数被调用时为其分配存储单元的,其生存期为函数被调用期间,调用结束就释放。函数的形参也属于此类变量。在复合语句中定义的自动变量,其生存期为该复合句被执行期间。

(2)定义而不初始化时,其值是不确定的。如果定义并初始化,则赋初值操作是在函数被调用时进行的,并且每次调用都要重新赋一次初值。

(3)由于自动变量的作用域和生存期都局限于定义在它的个体内(函数或复合句),因此不同的个体中允许使用同名的变量而不会混淆。即使在函数内定义的自动变量,也可以与该函数内部的复合句中定义的自动变量同名。

注意:系统不会混淆,并不意味着人也不会混淆,所以尽量少用同名自动变量。

【例6.18】自动变量与静态内部变量的存储特性示例。

程序运行结果如下:

3.寄存器存储——寄存器变量

一般情况下,变量的值都是存储在内存中的。为了提高执行效率,C语言允许将内部变量的值存放到寄存器中,这种变量就称为寄存器变量。定义格式如下:

register 数据类型 变量表;

(1)只有内部变量和形参变量才能定义成寄存器变量,即外部变量不行。

(2)对寄存器变量的实际处理,随系统而异。例如,微机上的MS C和Turbo C将寄存器变量实际当作自动变量处理。

(3)允许使用的寄存器数目是有限的,不能定义任意多个寄存器变量。一般将函数中使用频率最高的变量定义为寄存器变量,以此提高程序的执行效率。

【例6.19】输出1~4的阶乘。

程序运行结果如下:

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

我要反馈