变量的属性有五种:
(1)名字(必须显示说明)
(2)类型 (必须显示说明)
(3)存储类别 (缺省方式或显示说明(使用:auto、register、static、extren))
(4)作用域 (由存储类别决定)
(5)生存期 (由存储类别决定)
前两种不必解释了,顾名思义。下面详细区分后三种概念:
- 变量的存储类别
定义:指系统对变量存储方式的规定。
分类:由存储方式的不同分为两类:
(1)静态存储方式:指在程序运行期间,系统对变量固定地分配存储空间。即一旦分配,不在变化,直到整个程序运行结束。
(2)动态存储方式:指在程序运行期间,系统对变量动态地分配存储空间。即程序运行期间,可根据程序需求,动态分配。
存储类别既说明了变量的存储单元,又说明了变量的生存的时间和作用域。
具体包含四种:
在讨论一下四种限定符之前,先注明一个事实:在某一个程序文件中定义的全局变量和函数均默认是外部的!即跨文件的,但为什么使用还要加extern?这个稍后再讲。
(1)自动变量auto:指不加说明的局部变量。变量生存期结束由系统自动释放其存储空间,故名自动。
(2)寄存器变量register:为提高程序执行效率,允许将局部变量的值存放于寄存器(而不必存在内存)中,但一般不提倡这种做法。
(3)static变量:可作用于局部变量和全局变量,故可分为:局部静态和全局静态。静态(static)说的是:生存期;而局部or全局说的是:作用域(However,此时应注意:由于全局变量作用域本来就默认为整个程序中,即可垮文件使用(公有);可一旦加上static修饰,则隐藏了变量或函数名字,使之成为本文件(模块)私有)。
(4)以extern声明的变量:指全局变量,若其要在其他文件中使用,需加以声明,方法-->使用前用extern作外部声明即可(通常放于文件开头,并且对于函数而言,通常省略关键字extern)。
总的来说:变量的存储类别+定义变量的位置 =》变量的作用域和生存期
- 变量的作用域
- 变量的生存期