C语言中的变量按照生存周期来区分,可以分为静态存储和动态存储。
一、静态存储
静态存储是在程序运行过程中分配固定的存储空间。静态存储区中存放了整个程序运行过程中的都存在的变量,如全局变量,因此静态存储区也叫做全局存储区。
二、动态存储
动态存储则是在程序运行过程中根据需要进行动态分配存储空间。动态存储区中存放的变量是根据程序运行的需要进行建立和释放的,如函数形参,自动变量,函数调用时的现场保护和返回地址等。
C语言中存储类别分为四类:自动(auto)、静态(static)、寄存器(register)、外部(extern)。
一、自动存储(auto)
用关键字auto定义的变量为自动变量,auto不写则默认为自动存储。自动存储类别属于动态存储方式。
auto int a, b; //定义自动变量a, b
二、静态存储(static)
用static修饰的变量,如果是定义在函数内部,称之为静态局部变量;如果是定义在函数外部,称之为静态外部变量。
static int a; //定义静态变量a
注意,静态局部变量属于静态存储类别,在静态存储区内分配存储单元,在整个程序运行期间都不释放。静态局部变量在编译时赋初值,即只赋初值一次。
三、寄存器变量(register)
为了提高效率,C语言允许将局部变量的值放在CPU的寄存器中,称之为“寄存器变量”,用关键字register进行声明。
register int a; //定义寄存器变量a
注意,只有局部自动变量和形式参数可以作为寄存器变量,局部静态变量不能定义为寄存器变量;一个计算机系统中的寄存器数量有限,因此不能定义任意多个寄存器变量。
四、外部变量(extern)
用extern声明的变量为外部变量,外部变量的意义是某函数可以调用在该函数之后定义的变量。如:
#include <stdio.h>
int main()
{
extern int a; //声明此处使用的是外部全局变量
printf("a的值为%d\n", a);
return 0;
}
int a = 5;