变量按作用范围来分可以分为局部变量和全局变量
变量 | Discription |
局部变量 | 在函数内部定义的变量,函数内部的形参。作用范围在函数内部。 |
全局变量 | 在所有函数的外部的申明,称为全局变量 |
注意,全局变量不属于某个函数,而是整个源文件。如果外部文件要进行调用(比如两个不同的源文件),需要使用extern进行修饰。
变量按存储类别分为静态存储、动态存储
存储方式 | Discrioption |
静态存储方式 | 在程序运行时分配(存储全局变量) |
动态存储方式 | 在程序运行期间根据需要分配(存储局部变量,函数形参,自动变量,函数调用时现场保护) |
auto变量 未加存储类型说明的变量称为自动变量,省略了auto.
static变量 1、局部变量的值在函数调用后不消失,但是作用域还是在局部
2、某些变量只限于本文引用,而不能被其他文件引用
变量的赋初值问题:1、静态变量不赋初值,系统自动赋予0值。
2、自动变量赋初值,其值是不确定的。
静态存储 | |
静态全局变量 | 可以理解为限制了全局变量的作用范围,当源程序由多个源文件组成时,静态全局变量只在定义的源文件中有效。 |
非静态全局变量 | 在各个源文件中都有效 |
register变量
Discription:当反复读写时,需要读写内存,速度,比较慢,为了提高效率而引入了寄存器变量。
注意:如果需要有效的利用寄存器变量,则需要像汇编语言那样,了解处理器的内部结构。
extern变量
如果源文件函数想要引用其他源文件中的变量,可以用extern来声明外部变量,extern可以扩展变量的作用域。