局部变量 | 外部变量 | ||||
存储类别 | auto | register | 局部static | 外部static | 外部extern |
存储方式 | 动态 | 静态 | |||
存储区 | 动态区 | 寄存器 | 静态存储区 | ||
生存期 | 函数调用开始至结束 | 程序整个运行期间 | |||
作用域 | 定义变量的函数或复合语句内 | 本文件 | 其他文件 | ||
赋初值 | 每次函数调用时 | 编译时赋初值,只赋一次 | |||
未赋初值 | 不确定 | 自动赋初值0或NULL |
注意点:
1.局部变量默认为auto,具有局部寿命,局部可见性
2.register变量个数受限,且不能为long,double,float型,因为系统的通用寄存器字长有限
3.局部static有全局寿命,局部可见性,可继承性(只赋一次初值)
4.extern不是变量定义,可扩展外部变量作用域