- 自动变量
- 属于自动存储类别的变量,具有自动存储期(变量的存在只在程序进入变量声明所在的块时,程序退出则该变量所在内存位置可被他用)、块作用域且无链接(即只能在该变量定义所在的块中通过变量名访问该变量,其他函数可以使用同名变量)。
- 一般,声明在块或者函数头中的任何变量都属于自动存储类别。
- 为了更明确的表示该意图,可以显式使用关键字auto(该关键字为存储类别说明符)
- 自动变量必须显示初始化,如不初始化则该变量的值时之前占用该空间中的任意值。
- 寄存器变量
- 寄存器变量一般(register只是一种请求,未必能真的分到)存储在寄存器中而非内存中,访问与处理改变量的速度更快,但无法获取改变量的地址。
- 它与自动变量一样,属于块作用域、无链接、自动存储期。
- 使用存储类别说明符register可声明改变量。
- 块作用域的静态变量
- 具有文件作用域的变量自动具有静态存储期;
- 该变量具有块作用域。无链接,但属于静态存储期(该变量在内存中原地不动,不是说他的值不会变),与自动变量的区别即存储期不同,自动变量每次程序进入块都要被初始化一次,而static修饰的变量,初始化只会一次;若未被初始化则会被初始化为0.
- 存储类型说明符static可用于声明该变量。
- 该变量也常被称为内部静态存储变量(此处的内部指的是函数内部而非内部链接)
- 外部链接的静态变量
- 具有文件作用域、外部链接、静态存储期。
- 又叫外部变量,可以使用extern来声明
- 未显示初始化时,该变量则会被自动初始化为0
- 内部链接的静态变量
- 具有文件作用域、内部链接、静态存储期
- 用static修饰的,在所有函数外部的(全局变量加static使其变成内部链接)
注:内部链接和外部链接的重要性主要体现在,程序哟多个翻译单元组成时,此时,多个文件要共享一个外部变量,改变量只能在一个文件中定义式声明,在其他文件中引用式声明。