(一)AUTO
auto----自动变量,动态存储方式
auto是C语言中局部变量的默认属性
编译器默认所有的局部变量
auo变量存储在程序的栈中,默认属性
特点:
(1) 自动变量仅适合于局部变量,其作用域仅限于定义该变量的个体内。在函数定义中定义的自动变量,只在改函数内有效。在复合语句中定义的自动变量只在该复合语句中有效。
(2)自动变量属于动态存储方式,只有在使用它,即定义该变量的函数被调用时才给它分配存储单元,开始它的生存期。函数调用结束,释放存储单元,结束生存期。
(3)由于自动变量的作用域和生存期都局限于定义它的个体内,因此不同的个体中允许使用同名的变量而不会混淆。
(二)STATIC
static---静态变量,静态存储方式
static变量存储在程序静态区中
static修饰的局部变量存储在程序静态区
static的另一个意义是文件作用域标识符
static可以修饰函数,也可以修饰全局变量
static修饰的全局变量作用域只是声明的文件中
static修饰的函数作用域只是声明的文件中
特点:
(1)静态局部变量
生存期为整个源程序
作用域仍与自动变量相同,即只能在定义该变量的函数内使用该变量
允许对静态局部变量赋初值,若未赋予初值,系统自动赋以0值
静态局部变量在编译时赋初值,只赋初值一次
(2)静态全局变量
全局变量的说明之前再冠以static就构成了静态的全局变量
(三)REGISTER
register---寄存器变量,动态存储方式
register变量请求存储于CPU寄存器中
register关键字指明将变量存储于寄存器中
register只是请求寄存器变量,但不一定请求成功
register变量的必须是CPU寄存器可以接受的值
不能用&运算符获取register变量的地址
特点:
(1)只有局部自动变量和形式参数才可以定义为寄存器变量。
(2)由于CPU中寄存器的个数是有限的,因此使用寄存器变量的个数也是有限的