动态变量vs常量 动态存储vs静态存储

来源:互联网 发布:汤凤龙网络课 编辑:程序博客网 时间:2024/06/06 15:04

变量的存储式可分为“静态存储”和“动态存储”两种。

  静态存储变量通常是在变量定义时就分定存储单元并一

直保持不变, 直至整个程序结束。5.5.1节中介绍的全局变量即属于此类存储方式。动态存储变量是在程序执行过程中,使用它时才分配存储单元, 使用完毕立即释放。 典型的例子是函数的形式参数,在函数定义时并不给形参分配存储单元,只是在函数被调用时,才予以分配, 调用函数完毕立即释放。如果一个函数被多次调用,则反复地分配、 释放形参变量的存储单元。从以上分析可知, 静态存储变量是一直存在的, 而动态存储变量则时而存在时而消失。我们又把这种由于变量存储方式不同而产生的特性称变量的生存期。 生存期表示了变量存在的时间。 生存期和作用域是从时间和空间这两个不同的角度来描述变量的特性,这两者既有联系,又有区别。 一个变量究竟属于哪一种存储方式, 并不能仅从其作用域来判断,还应有明确的存储类型说明。


  在C语言中,对变量的存储类型说明有以下四种:

auto     自动变量

register   寄存器变量

extern    外部变量

static    静态变量 

  自动变量和寄存器变量属于动态存储方式, 外部变量和静态变量属于静态存储方式。在介绍了变量的存储类型之后, 可以知道对一个变量的说明不仅应说明其数据类型,还应说明其存储类型。 因此变量说明的完整形式应为: 存储类型说明符 数据类型说明符 变量名,变量名…; 例如:

static int a,b;           说明a,b为静态类型变量

auto char c1,c2;          说明c1,c2为自动字符变量

static int a[5]={1,2,3,4,5};    说明a为静整型数组

extern int x,y;           说明x,y为外部整型变量

下面分别介绍以上四种存储类型:
一、自动变量的类型说明符为auto。

  这种存储类型是C语言程序中使用最广泛的一种类型。C语言规定, 函数内凡未加存储类型说明的变量均视为自动变量, 也就是说自动变量可省去说明符auto。 在前面各章的程序中所定义的变量凡未加存储类型说明符的都是自动变量。例如:



从变量的作用域(即从空间)角度来分,可以分为全局变量局部变量

从另一个角度,从变量值存在的作时间(即生存期)角度来分,可以分为静态存储方式动态存储方式

静态存储方式:是指在程序运行期间分配固定的存储空间的方式。

动态存储方式:是在程序运行期间根据需要进行动态的分配存储空间的方式。

用户存储空间可以分为三个部分:

1)        程序区;2)        静态存储区;3)        动态存储区;

全局变量全部存放在静态存储区,在程序开始执行时给全局变量分配存储区,程序行完毕就释放。在程序执行过程中它们占据固定的存储单元,而不动态地进行分配和释放;

动态存储区存放以下数据:

1)        函数形式参数;

2)        自动变量(未加static声明的局部变量);

3)        函数调用实的现场保护和返回地址;

对以上这些数据,在函数开始调用时分配动态存储空间,函数结束时释放这些空间。

c语言中,每个变量和函数有两个属性:数据类型和数据的存储类别。

原创粉丝点击