对一个数据的定义,需要指定两种属性:存储类别和数据类型。其中存储类别有以下几种:static(静态变量)、auto(自动变量,一般没加存储类别都默认是自动变量,如果int a,就是一个自动变量)、register(寄存器变量)、extern(外部变量)。
我们可以从一下几个角度来区别这些变量:
1、从作用于角度分:局部变量和全局变量
(1)局部变量:
自动变量,即动态局部变量(离开函数,值消失);
静态局部变量(离开函数,值保存);
寄存器变量(离开函数,值消失)—— 跟自动变量的区别就是自动变量存储于内存,而寄存器变量存放于寄存器,读取速度比自动变量快。
(2)全局变量:
静态外部变量(只限本文件引用);
外部变量(允许其他文件引用);
2、从变量存在时间分:动态存储和静态存储
(1)动态存储:
自动变量(本函数内有效);
寄存器变量(本函数内有效);
形式参数(本函数内有效);
(2)静态存储:
静态局部变量(本函数内有效);
静态外部变量(本文件内有效);
外部变量(其他文件可引用);
3、从存放位置上分:
(1)内存中的静态存储区:静态局部变量,静态外部变量,外部变量;
(2)内存中的动态存储区:自动变量和形式参数;
(3)cpu中寄存器:寄存器变量;