这次的学习点比较多,也不打算一一记录了,就来说说对于我这个刚刚接触c++比较头疼的指针和引用吧。
一.相同点:
指针指向一块内存。这里面储存的是指向内存的地址。而引用,看起来有些不一样。但是实现上也是用了指针。它是某块内存的别名。
ps:说起来有些拗口。简单理解起来就是两个都是指针。不过引用是比较漂亮的指针。、
二.区别:
1. 指针是一个实体,而引用仅是个别名;
2. 引用使用时无需解引用(*),指针需要解引用;
3. 引用只能在定义时被初始化一次,之后不可变;指针可变;(2和3其实是相关的。因为引用只能初始化一次,下次使用=赋值的时候,改变的是引用对象的值,所以无需解引用。);
4. 引用没有 const,指针有 const,const 的指针不可变;
5. 引用不能为空,指针可以为空;
6. “sizeof 引用”得到的是所指向的变量(对象)的大小,而“sizeof 指针”得到的是指针本身(所指向的变量或对象的地址)的大小;
typeid(T) == typeid(T&) 恒为真,sizeof(T) == sizeof(T&) 恒为真,但是当引用作为成员时,其占用空间与指针相同(没找到标准的规定)。
7. 指针和引用的自增(++)运算意义不一样;
三.使用
通常来说引用用在函数参数类型和返回参数之中。
(下面借用下课堂ppt)
下面是一个需要注意的地方:
int i = 5;
int j = 6;
int& k = i;
k = j;
猜猜k和i的值是多少?
他们的值都是6;
因为k这个引用再次赋值的时候,是它引用的i的值被赋值了,而不是改变k引用的对象。所以这里改变k的值,就是 改变i的值,所以都是6.
最后说一句,因为引用的传递速度快 ,所以函数传参的时候,能够使用引用的,尽量使用引用。
ok,这次就到这里。后面继续。