回覆列表
  • 1 # 夏夜辰風68

    瞭解c/c++的讀者可能會發現,指標和引用有著諸多的相似之處。指標是c語言本身就有的一個特性,而引用是c++繼承了c語言指標的同時才引用的。那麼它們之間隱藏的一些深層次的聯絡到底是怎樣的呢?

    指標和引用的共同點使用它們作為形參,都可以透過該引數修改主調函式中的變數以達到引數雙向傳遞的目的,都可以透過避免值複製的發生從而減少函式呼叫時的資料傳遞開銷。它們所佔用的記憶體空間儲存的都是地址。因為在程式執行時,變數只能依靠地址來區別,無論是指標還是引用只有儲存的是地址,在執行時才能準確定位到目標,進行準確的操作。指標和引用的區別普通指標可以多次被賦值,也就是可以多次更改它所指向的物件,而引用則不能,引用在初始化時就指定被引用的物件,其後不能更改;

    2.指標可以再次取地址,而引用則不行。

    比如上表最後一行,ptr得到的是變數temp的地址,而ptr還能在取地址&ptr得到是指標的地址,而引用卻不能再取地址了,因為引用本身的地址是不可以獲得的,引用本身所佔用的空間則被完全隱藏起來,引用一經定義後,對於它的全部行為全是針對引用物件。

    3.既有常指標也有指標常量,但是隻有常引用沒有引用常量,詳細見下圖:

    沒有引用常量的原因在於,引用在初始化時就指定了它所引用的物件,其後不能更改,這使得引用本身就具有常量性質了。

    可以肯定地說,用引用能實現的功能指標都能實現,但反過來卻不行,有些時候引用還是代替不了指標的,比如:如果一個指標所指向的物件需要用分支語句加以確定,或者在中途需要改變它所指物件的值,那麼在它初始化之後需要為它賦值,而引用只能在初始化時指定被引用的物件,所以不能勝任;有時一個指標可以是空指標,例如把指標作為函式的引數型別或返回型別時,有時會用空指標表達特定的含義,比如我們熟悉的time()函式,而沒有空引用之說,所以引用不能勝任。使用函式指標,由於沒有函式引用,所以函式指標無法被引用替代。以上的表格和程式碼是我親自制作的,有錯歡迎指正。以上就是我的回答,喜歡請關注小編,我們一起探討程式設計中的問題。

  • 中秋節和大豐收的關聯?
  • 頭油有異味怎麼辦?