指針 引用

指針

* 與 ->



引用

& 與 .

引用是一個變量對象的,用於函數參數和返回值類型,使用方法與被引用的變量相同。

引用是一種隱式的指針,對它的操作都會被解釋爲對它引用的對象的操作。 

引用在定義時必須初始化爲一個變量,否則會引發編譯錯誤。

符號X&表示X類型的引用。

引用不佔用棧空間,因爲編譯器知道它的地址。但作爲參數傳遞引用時,會把指針放在參數棧中。


區別

引用不可以爲空,指針可以爲空。
前面也說過了引用是對象的別名,引用爲空——對象都不存在,怎麼可能有別名!故定義一個引用的時候,必須初始化
因此如果你有一個變量是用於指向另一個對象,但是它可能爲空,這時你應該使用指針。

引用比指針更安全。
由於不存在空引用,並且引用一旦被初始化爲指向一個對象,它就不能被改變爲另一個對象的引用,因此引用很安全。
對於指針來說,它可以隨時指向別的對象,並且可以不被初始化,或爲NULL,所以不安全。const 指針雖然不能改變指向,但仍然存在空指針,並且有可能產生野指針(即多個指針指向一塊內存,free掉一個指針之後,別的指針就成了野指針)。

引用比指針效率更高。
由於不存在空引用,在使用前不需要進行合法性判斷,而指針總需要if判斷,因而引用的代碼效率比指針高。

引用不可以改變指向,指針可以改變所指的對象。
雖然引用不可以改變指向,但是可以改變初始化對象的內容。例如就++操作而言,對引用的操作直接反應到所指向的對象,而不是改變指向;而對指針的操作,會使指針指向下一個對象,而不是改變所指對象的內容。

引用的大小是所指向的變量的大小,因爲引用只是一個別名而已;指針是指針本身的大小,4個字節



當知道必須指向一個對象並且不改變指向,或者在重載操作符並避免不必要的語義誤解時,不應該用指針。
除此外,指針比引用更適合使用。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章