在C语言中,供用户使用的存储空间分为三类:程序区、静态存储区、动态存储区。
变量存储类型指的是数据在内存中存储的方式。变量的存储方式可以分为两类:静态存储类和动态存储类。具体包含4种:自动型(auto)、静态型(static)、寄存器型(register)和外部型(extern)
局部变量有三种存储方式:自动型、静态型和寄存器型。
自动变量:函数中的局部变量如不特别申明为static存储类型,都是动态地分配存储空间,数据存储在
动态存储区。在调用函数时,系统会给数据分配存储空间,在函数调用结束时就会释放这些存储空间。自动变量用关键字auto作为存储类别的申明,可以省略
静态变量:自动变量在函数调用结束后其所占用的内存空间会被释放,有时希望函数中的局部变量的值在函数调用结束后不消失而保留原值,即其占用的内容空间不被释放,在下次调用时,该变量已有值,这时就可以声明局部变量为“静态局部变量”,用关键字“static”进行声明
说明:局部静态变量是在
静态存储区分配存储单元的,在整个程序运行期间都不释放;局部静态变量是在程序编译过程中被赋值的,且只赋值一次,在程序运行时其初值已经确定,以后每次调用函数时不再赋值,而是保留上一次函数调用结束时的值;初值为0(整型变量)或空字符(字符型变量);其它函数不能引用
寄存器变量:C语言中允许将局部变量的值放在CPU中的
寄存器中,需要时直接从寄存器中读取数据,不必再到内存中读取数据,这种变量称为寄存器变量,用关键字“register”声明
说明:只有局部自动变量和形式参数可以作为寄存器值
全局变量在静态存储区中分配内存单元的,存储类型有两种:外部类型(extern)和静态类型(static)
外部全局变量:全局变量是在函数的外部定义的,它的作用域是从变量的定义处开始到本程序文件的结束。如果在定义点之前的函数想要引用该变量,则应该在引用之前用关键字extern对该变量进行声明,声明该变量为外部全局变量
说明:extern不能用来初始化变量,extern的作用是扩展全局变量的作用域,在系统编译遇到extern时,先在本文中寻找全局变量的定义,如果找不到,在链接时从其它文件中全局变量的定义
静态全局变量:在设计一个程序时,有时不希望某些全局变量被其它文件引用,这时可以用关键字static对全局变量进行声明
说明:无论是否对全局变量进行static声明,全局变量均是静态存储方式,使用static声明的静态全局变量,在本文件中定义在全局变量之前的函数也是不能引用的
- 程序存放的是可执行程序的机器指令;
- 静态存储区存放的是在程序运行过程中需要占用的固定存储单元的变量,如全局变量
- 动态存储区存放的是在程序运行过程中根据需要动态分配内容空间的变量,如形式参数、局部变量
- 变量存储类型
- 局部变量的存方式
- 自动变量
- 静态变量
- 寄存器变量
- 全局变量的存储方式
- 外部全局变量
- 静态全局变量