变量的存储类型

来源:互联网 发布:软件授权iphone 编辑:程序博客网 时间:2024/05/23 18:20

变量的存储类型:

从变量值存在的时间(即生存期)看,变量的存储类型分为静态存储动态存储两种不同的方式。

静态存储方式:
在程序运行期间由系统分配固定的存储空间,其值存在的时间是从程序开始执行到程序结束
动态存储方式:
在程序运行期间根据需要进行动态的分配存储空间,其值存在的时间是从包含该变量定义的函数开始执行至函数执行结束

变量在内存中的存放位置和类型
C语言中可使用的存储空间分为三个,分别是:程序区、静态存储区、动态存储区。
程序区存放可执行程序的机器指令。
静态存储区存放全局变量和局部静态变量。
动态存储区存放局部变量、形参、和函数调用现场。

存储类型可以分为四种,分别是:auto 自动变量(动态存储区)、register 寄存器变量(CPU中的寄存器)、extern 外部变量(静态存储区)、static 静态变量(静态存储区)。

局部变量的存储方式(自动变量、静态局部变量、寄存器变量):

1.自动变量(auto):函数中的局部变量,不做任何存储类别的说明都为自动变量。
说明:

  1. 自动变量必须在一个函数体的内部,分配在动态存储区。
  2. 自动变量不赋初值,其值不确定。每调用一次,重新赋值一次。
  3. 函数的形参也是自动变量。
  4. “自动”体现在进入语句块时自动申请内存,退出时自动释放内存,对其进行的分配和释放存储空间的工作,由编译系统自动处理。

2.静态局部变量(static):函数中局部变量的值在函数调用结束后不消失(以后一直存在并总是保持它的最新值,即具有记忆性),即不释放存储单元。此时可指定该变量为“静态局部变量”。定义形式:static 类型说明符 变量名;
特性:

  1. 静态局部变量系统自动初始化为0,存放在静态存储区;生存期为整个程序运行期间;
  2. 静态局部变量和全局变量都是静态存储类型,但作用域不同;
  3. 静态局部变量在编译时赋初值,每次调用时不再赋初值,只保留调用结束时变量的值。其值在整个程序运行期间都不释放。即上一次调用的结果会被保存下来。

3.寄存器变量(register):对频繁使用的变量,为减少存取变量花费的时间,C语言允许将局部变量的值存放在CPU运算器的寄存器中,称为“寄存器变量”,用关键字“register”说明。定义形式:register 类型说明符 变量名;
说明:

  1. 寄存器变量的类型一般只限于整型、字符型或指向整型、字符型的指针,且只用于局部变量和形参。
  2. 全局变量、局部静态变量不可以作为寄存器变量。
  3. 不能定义任意多个寄存器变量,一个计算机系统中寄存器的数目是有限的。不能取寄存器变量的地址。

全局变量的存储方法(外部类型、静态类型)
1.外部全局变量:一个文件中要引用其他文件中定义的变量,应该在需要引用此变量的文件中用extern进行说明。
2.静态全局变量:一个文件中的全局变量仅限于定义它的文件引用,而不能被其他文件访问,需要用static进行说明。
说明:

  • 外部全局变量与静态全局变量在同一文件内的作用域一样;
  • 外部全局变量可以被多个文件引用,而静态全局变量仅在定义它的文件内有效,在程序的其他文件中不可使用。
原创粉丝点击