变量的存储类型
存储类型决定变量在内存中的存储位置。在计算机的内存和CPU的寄存器都可以存储变量。
C语言中变量的存储类型分为自动型(auto)、寄存器型(register)、外部型(extern)、和静态型(static)四种。变量的存储方式分为两大类,即静态存储和动态存储。
静态存储
在编译时由系统分配固定的存储空间,直到程序运行结束后才释放所占用的存储空间
动态存储
在程序运行时根据需要动态地分配和释放存储空间。
注:自动型变量和寄存器型变量属于动态存储;外部变量和静态变量属于动态存储。
自动型变量
【格式】 [auto] 类型类型 变量表;
auto可以省略,当省略auto时,C语言默认为auto型。程序中使用的变量大多是自动型变量
auto int a;
int b;
说明:自动型变量存放在内存的动态存储区,属于动态存储方式。函数中定义的自动型变量,只在该函数内有效;函数被调用时系统为自动型变量分配存储空间,函数调用结束时系统自动释放所分配的存储空间,以分配给其他的自动型变量,这样可以节省内存。从分配到释放之间是自动型变量的生存期。
注:定义自动型变量时如果没有初始化,则其值是不确定的,是系统赋予的随机数;
int a;
printf("%d",a);
//每次a的值都会不同
静态型变量
【格式】 static 数据类型 变量表;
static int a
说明:静态型变量存放在内存的静态存储区,属于静态存储方式。在程序执行过程中,即使所在函数调用结束也不释放。换言之,在程序执行期间,静态型变量始终存在,始终占用固定的存储空间,直到程序运行结束后才释放存储空间。静态型变量的生存期与程序的运行期相同。因为函数中的静态型变量在函数调用结束时不释放占用的存储空间,因此其值能保存下来,供下一次调用该函数时使用。
定义静态型变量时如果没有初始化,则编译系统自动赋值0(整型和实型)或'\0'(字符型)。
静态型变量如果初始化,只有第一次执行定义语句时随着分配内存赋予初值,且只赋一次初值。以后每次调用它们所在的函数时,不再重新分配内存,不再重新赋初值,只是保留上次调用结束时的值。
静态型变量在程序运行期间始终存在,但在其作用域以外不能使用。
int var_auto = 0; //每次调用都重新初始化
static int var_static = 0; //只初始化一次