介绍
变量和函数都有两个属性:数据类型和存储类别,存储类别的不同则它们的作用域和生存期均有所差别
四种存储方式
auto
一般定义的变量没有直接默认为auto类型,函数执行时分配空间,函数结束时自动释放。
static
定义的变量在函数结束后不释放,对静态局部变量在编译时只赋值一次,第二次执行赋值语句时不再重新赋值,但是其他函数也无法使用该静态变量。编译时将变量分配在静态存储区。
extern
声明外部变量,外部变量即全局变量,它的作用域是从变量的定义出开始,到程序文件的结尾。编译时将变量分配在静态存储区。
register
如果有一些变量使用频繁,则每次存取变量的值需要花费很长一段时间,为提高执行效率,C语言允许将局部变量的值直接放在CPU的寄存器中.
作用域
局部变量
- 自动变量,动态局部变量,函数结束时变量将会被释放
- 静态局部变量,函数结束时变量被保存
- 寄存器变量,函数结束时变量将会被释放
- 形参可以定义为自动变量或寄存器变量
全局变量
- 静态外部变量,只能在本文件中使用
- 非静态外部变量,允许其他文件使用
生存期
动态存储
- 自动变量(在函数内有效)
- 寄存器变量(在函数内有效)
- 形参(在函数内有效)
静态存储
- 静态局部变量(在函数内有效)
- 静态外部变量(在文内有效)
- 外部变量(其他文件也可使用)