1.局部变量、全局变量、静态局部变量、静态全局变量
『局部变量』:定义在函数内部,只有在函数内部才有效;特点:进来创建,出去销毁;
『静态局部变量』:定义在函数内部,只有在函数内部才有效;但是只会在开始分配一次内存,不会消失;特点:进来创建,一直保留;
『全局变量』:定义在所有函数之外,整个工程都可以使用;其他文件使用要加 extern 关键字;且需要注意,改动一处全局变量的值会影响所有相同全局变量;特点:开始创建,一直保留;
『静态全局变量』:定义在所有函数之外,和全局变量一样,但是只有定义的文件才能使用;特点:开始创建,一直保留,自己可用;
局部变量 | 局部静态变量 | 全局变量 | 全局静态变量 | |
---|---|---|---|---|
作用域 | 局部 | 局部 | 全局 | 全局 |
内存空间 | 栈 | 静态存储区 | 静态存储区 | 静态存储区 |
生命期 | 临时 | 长期 | 长期 | 长期 |
总结特点 | 临时创建,出去销毁。 | 临时创建,一直保留。 | 开始创建,一直保留。 | 开始创建,一直保留,自己可用。 |
2.引用和指针的区别
指针和引用都是通过地址索引数据的。
指针存放的是变量的地址,引用是变量的别名。
指针也是一个变量需要占用4个字节(32位机器)的内存空间,引用不需要占用内存,它只是变量的一个别名。
引用必须被初始化,但是不分配存储空间。
指针不声明时初始化,在初始化的时候需要分配存储空间。
引用初始化以后不能被改变,指针可以改变所指的对象。
不存在指向空值的引用,但是存在指向空值的指针
3.static关键字作用
static 关键字最基本的用法是:
1、被 static 修饰的变量属于类变量,可以通过类名.变量名直接引用,而不需要 new 出一个类来
2、被 static 修饰的方法属于类方法,可以通过类名.方法名直接引用,而不需要 new 出一个类来
被 static 修饰的变量、被 static 修饰的方法统一属于类的静态资源,是类实例之间共享的,换言之,一处变、处处变。
在 C++ 中,静态成员是属于整个类的而不是某个对象,静态成员变量只存储一份供所有对象共用。所以在所有对象中都可以共享它。
4.深拷贝与浅拷贝区别
深拷贝和浅拷贝最根本的区别在于是否真正获取一个对象的复制实体,而不是引用。
浅拷贝只复制指向某个对象的指针,而不复制对象本身,新旧对象还是共享同一块内存。但深拷贝会另外创造一个一模一样的对象,新对象跟原对象不共享内存,修改新对象不会改到原对象。
当我们把一个对象赋值给一个新的变量时,赋的其实是该对象的在栈中的地址,而不是堆中的数据。也就是两个对象指向的是同一个存储空间,无论哪个对象发生改变,其实都是改变的存储空间的内容,因此,两个对象是联动的。