1.首先敏弃,引用不可以為空晕窑,但指針可以為空。前面也說過了引用是對(duì)象的別名,引用為空——對(duì)象都不存在傻昙,怎么可能有別名!故定義一個(gè)引用的時(shí)候脾拆,必須初始化夜惭。因此如果你有一個(gè)變量是用于指向另一個(gè)對(duì)象,但是它可能為空啸胧,這時(shí)你應(yīng)該使用指針赶站;如果變量總是指向一個(gè)對(duì)象,i.e.纺念,你的設(shè)計(jì)不允許變量為空贝椿,這時(shí)你應(yīng)該使用引用。如下圖中陷谱,如果定義一個(gè)引用變量烙博,不初始化的話連編譯都通不過(編譯時(shí)錯(cuò)誤)
而聲明指針是可以不指向任何對(duì)象,也正是因?yàn)檫@個(gè)原因烟逊,使用指針之前必須做判空操作渣窜,而引用就不必。
2.其次焙格,引用不可以改變指向图毕,對(duì)一個(gè)對(duì)象"至死不渝";但是指針可以改變指向眷唉,而指向其它對(duì)象予颤。說明:雖然引用不可以改變指向,但是可以改變初始化對(duì)象的內(nèi)容冬阳。例如就++操作而言蛤虐,對(duì)引用的操作直接反應(yīng)到所指向的對(duì)象,而不是改變指向肝陪;而對(duì)指針的操作驳庭,會(huì)使指針指向下一個(gè)對(duì)象,而不是改變所指對(duì)象的內(nèi)容。
3.再次饲常,引用的大小是所指向的變量的大小蹲堂,因?yàn)橐弥皇且粋€(gè)別名而已;指針是指針本身的大小贝淤,4個(gè)字節(jié)
4.最后柒竞,引用比指針更安全。由于不存在空引用播聪,并且引用一旦被初始化為指向一個(gè)對(duì)象朽基,它就不能被改變?yōu)榱硪粋€(gè)對(duì)象的引用,因此引用很安全离陶。對(duì)于指針來說稼虎,它可以隨時(shí)指向別的對(duì)象,并且可以不被初始化招刨,或?yàn)镹ULL霎俩,所以不安全。const 指針雖然不能改變指向计济,但仍然存在空指針茸苇,并且有可能產(chǎn)生野指針(即多個(gè)指針指向一塊內(nèi)存,free掉一個(gè)指針之后沦寂,別的指針就成了野指針)
總之学密,用一句話歸納為就是:指針指向一塊內(nèi)存,它的內(nèi)容是所指內(nèi)存的地址传藏;而引用則是某塊內(nèi)存的別名腻暮,引用不改變指向。