1、成员变量
成员变量是存在类中声明的。
依类而生,离开类之后就不是成员变量。
成员变量只能通过对象访问。
存储 :栈中
注:成员变量不能在定义的同时不能初始化。
2、全局变量
在函数外定义的变量,可为本源文件中其它函数所公用。
作用域:从定义变量的位置开始到本源文件结束。
存储:静态区域
程序一启动就会分配存储空间,直到程序结束才会释放。
3、局部变量:
写在函数或代码块中的变量, 我们称之为局部变量
作用域: 从定义的那一行开始, 一直到遇到大括号或者return
存储 : 栈
存储在栈中的数据有一个特点, 系统会自动给我们释放
补充:
1、变量分为全局变量、静态全局变量、局部变量、静态局部变量
2、变量存在的两个属性:作用域和存储类别
外部变量(全局变量)、静态外部变量(全局变量)、静态局部变量存储在静态存储区;注:常量也在静态存储区
自动局部变量(局部变量默认为自动局部变量)、函数形参存储在动态存储区(即栈区);
不论是静态存储区还是动态存储区均属于内存中的用户区;
而寄存器变量是存储在CPU寄存器中的而不是内存中
3、与存储类型相关的几个属性:
atuo:在声明局部变量时,若不指定static,默认均是auto,这类变量都是动态分配存储空间的,数据存储在栈中;
static:在声明局部变量时,使用关键字static 将局部变量指定为“静态局部变量”,这样在函数调用结束后不消失而保留原值,即占用的存储单元不释放,在下一次函数调用时,该变量已有值就是上次函数调用结束时的值;
register:在声明动态局部变量或者函数形参时,可将变量声明为register,这样编译系统就会为变量分配一个寄存器而不是内存空间,通过这种方式可提升对某些局部变量频繁调用的程序的性能。(寄存器运算速度远高于内存);
extern:用于扩展全局变量的作用域;
比如如果函数想引用一个外部变量,但该外部变量在该函数后定义,那么这个函数需要使用extern 来声明变量,这样才能使用在该函数后面定义的全局变量。
此外,extern 还可以在多文件的程序中声明外部变量。