3.可以有const指针,但是没有const引用;
4.引用不能为空,指针可以为空;
5.“sizeof 引用”得到的是所指向的变量(对象)的大小,而“sizeof 指针”得到的是指针本身(所指向的变量或对象的地址)的大小;
6.指针和引用的自增(++)运算意义不一样; 指针自增指向下一个地址,而引用是对变量本身的值的增加。
7.指针可以有多级,但是引用只能是一级(可以定义引用的引用,int i; int& ir = i; int &irr = ir,但这都是一级),例如int **p是合法的,而 int &&a是右值引用;
指针和引用的相同点
两者都是地址的概念,指针指向一块儿内存,其内容为所指内存的地址;引用是某块儿内存的别名。底层
可将引用看做常量指针,即指向的地址必须被初始化且不再发生改变的指针。
注意引用作为返回值
1.
不能返回局部变量的引用
,主要原因是局部变量会在函数返回后被销毁,因此被返回的引用就成为了"无所指"的引用,程序会进入未知状态。
2.
返回函数内部new分配的内存的引用,可能有内存泄露的风险
。虽然不存在局部变量的被动销毁问题,可对于这种情况(返回函数内部new分配内存的引用),又面临其它局面。例如,被函数返回的引用只是作为一个临时变量出现,而没有被赋予一个实际的变量,那么这个引用所指向的空间(由new分配)就无法释放,造成内存泄漏。
使用指针和引用的情况对比
1.是考虑到存在不指向任何对象的可能(在这种情况下,能够设置指针为空)
2.需要能够在不同的时刻指向不同的对象(在这种情况下,能改变指针的指向)。如果总是指向一个对象并且一旦指向一个对象后就不会改变指向,那么就应该使用引用。
3.重载某个操作符时,应该使用引用。当你知道你必须指向一个对象并且不想改变其指向时,或者在重载操作符并为防止不必要的语义误解时,你不应该使用指针。而在除此之外的其他情况下,则应使用指针。
菜鸟手记。