1、指针是一个地址值,而引用是一个实体的别名。这句干巴巴的话我理解了很久,终于有一点点明白这两者究竟不同在哪里。指针,是一种数据类型,它的值是一个地址,当声明一个指针,编译器会为这个指针变量分配内存空间;而引用不是数据类型,引用本身不会占内存空间,编译器也不会为引用分配空间。支持这一点的最有力的证据是,对一个指针变量取地址,会得到一个与这个指针本身的值不同的地址值,而对一个引用做取址运算,得到的地址则是引用的目标变量的地址。
2、指针可以指向不同的地址空间,但是引用一旦定义,只能指向那个固定的实体。
3、指针可以在定义的时候初始化,也可以定义为NULL值,也可以在定义的时候不初始化,过后再指定它的值,而引用必须在定义的时候初始化,而且必须用某个实体对其进行初始化,一旦定义完成,其值不可更改。
4、在传参的时候,使用指针传参,编译器需要给指针另行分配存储单元,存储一个该指针的副本,在函数中对这个副本进行操作;使用引用传参,编译器就不需要分配存储空间和保存副本了,函数将直接对实参进行操作。所以使用引用使得程序的效率更高。