引用:
* 引用并非对象,它只是为一个已经存在的对象所起的另外一个名字。
* 定义引用时,程序把引用和它的初始值绑定在一起,而不是将初始值拷贝给引用。
* 引用必须初始化,且一旦初始化,引用将和它的初始值对象一直绑定在一起,无法再重新绑定到 另外一个对象。
指针:
* 指针是“指向”另外一种类型的复合类型,与引用类似,也实现了对其他对象的间接访问。
* 指针本身就是就是一个对象,允许对指针赋值和拷贝,而且在指针的生命周期内它可以先后指向 不同的对象。
* 指针无需在定义时赋初值。
区别:
* 引用不可以为空,但指针可以为空。
* 引用不可以改变指向,对一个对象"至死不渝";但是指针可以改变指向,而指向其它对象。
* 引用的大小是所指向的变量的大小,因为引用只是一个别名而已;指针是指针本身的大小,4个字节。
* 引用比指针使用起来形式上更漂亮,使用引用指向的内容时可以直接用引用变量名,而不像指针一样要使用*;定义引用的时候也不用像指针一样使用&取址。
* 引用比指针更安全。由于不存在空引用,并且引用一旦被初始化为指向一个对象,它就不能被改变为另一个对象的引用,因此引用很安全。对于指针来说,它可以随时指向别的对象,并且可以不被初始化,或为nullptr,所以不安全。const指针虽然不能改变指向,但仍然存在空指针,并且有可能产生野指针(即多个指针指向一块内存,free掉一个指针之后,别的指针就成了野指针)。