c++指針和引用的區別與聯繫是什麼?怎麼才能做到活學活用?

夏夜辰風68


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

指針和引用的共同點

  1. 使用它們作為形參,都可以通過該參數修改主調函數中的變量以達到參數雙向傳遞的目的,都可以通過避免值複製的發生從而減少函數調用時的數據傳遞開銷。
  2. 它們所佔用的內存空間存儲的都是地址。因為在程序運行時,變量只能依靠地址來區別,無論是指針還是引用只有存儲的是地址,在運行時才能準確定位到目標,進行準確的操作。

指針和引用的區別

  1. 普通指針可以多次被賦值,也就是可以多次更改它所指向的對象,而引用則不能,引用在初始化時就指定被引用的對象,其後不能更改;

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



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

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



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

可以肯定地說,用引用能實現的功能指針都能實現,但反過來卻不行,有些時候引用還是代替不了指針的,比如:

  1. 如果一個指針所指向的對象需要用分支語句加以確定,或者在中途需要改變它所指對象的值,那麼在它初始化之後需要為它賦值,而引用只能在初始化時指定被引用的對象,所以不能勝任;
  2. 有時一個指針可以是空指針,例如把指針作為函數的參數類型或返回類型時,有時會用空指針表達特定的含義,比如我們熟悉的time()函數,而沒有空引用之說,所以引用不能勝任。
  3. 使用函數指針,由於沒有函數引用,所以函數指針無法被引用替代。

以上的表格和代碼是我親自制作的,有錯歡迎指正。以上就是我的回答,喜歡請關注小編,我們一起探討編程中的問題。


分享到:


相關文章: