- 指针和引用的区别
引用必须被初始化,但是不分配存储空间。指针不声明时初始化,在初始化的时候需要分配存储空间。
引用初始化后不能被改变,指针可以改变所指的对象。
不存在指向空值的引用,但是存在指向空值的指针。
从概念上讲。指针从本质上讲就是存放变量地址的一个变量,在逻辑上是独立的,它可以被改变,包括其所指向的地址的改变和其指向的地址中所存放的数据的改变。
而引用是一个别名,它在逻辑上不是独立的,它的存在具有依附性,所以引用必须在一开始就被初始化,而且其引用的对象在其整个生命周期中是不能被改变的(自始至终只能依附于同一个变量)。
What is the value of a? 20,改变了a的值
int a = 10;
int b = 20;
int &c = a;
c = b;
What is the value of a?10,只是改变了c的指向
int a = 10;
int b = 20;
int *c = &a;
c = &b;
- 利用new生成动态数组
int size, *dynamic_array, i;
cout << "Enter an array size: ";
cin >> size;
dynamic_array = new int[size];
for (i = 0; i < size; i++)
dynamic_array[i] = i;
ndelete [] dynamic_array;
-
浅拷贝与深拷贝
把现有的一个对象的所有成员属性拷贝给另一个对象的需求
浅拷贝:把所有内容再复制一份,若有指针成员可能会出现问题
深拷贝:指向对象的地址
可用复制构造函数,实现深呢拷贝,不然默认的就是浅拷贝。 -
返回局部变量
可以返回局部变量本身,但是不可以返回指向局部变量的指针。但是如果是用new构建点局部变量的指针,可以返回,因为new会在一个额外的地址存储变量。