深究指針與引用的差別

學習C++很長時間,一直沒有深究過引用與指針,感覺應該深入的瞭解下它們的區別:

由指針定義知,是指向內存中某個存儲體對象的變量。它可以指向簡單變量, 數組,結構體等,甚至函數 (函數指針)。個人在此有一個疑問,既然指針是指向存儲體的變量,而函數沒有存儲性質,那函數指針如何實現的?

我是從這感覺函數沒有存儲性質:

class  A{
   int  i;
 int fun(int );
};
大家都知道這個類內存中sizeof(A)= 4; 即它的內存完全是分配給(int)變量的。所以它的成員函數(int  fun(int))沒有存儲性質。所以就不明白函數指針的實現?

不知道上面的推理正確嗎? 還請大神指點

先繞過這個問題,我們繼續說指針和引用

引用的定義很簡單,就是對象的別名。是一種複合類型,不能定義引用類型的引用,可以定義其他類型的引用。

具體來說引用和指針有以下幾點區別:

 1: 非空區別。 任何情況下都不能使用指向空值的引用。一個引用必須總是指向某些對象。因此如果你使用一個變量並讓它指向一個對象,但該變量可能某段時間不指向任何對象,你就應該聲明一個指針。因爲你可以賦空值給該指針。相反,如果你可以確定變量一直指向某個對象,就可以使用引用。不存在指向空值的引用。


2: 合法性區別。使用引用可以不用測試它的合法性,但是指針就必須測試它的合法性,防止空指針。就好比有指針傳入函數,函數就必須檢測指針的合法性。


3:可修改性。指針可以被修改指向不同的對象。但是引用一直指向初始化時被指向的對像,不能改變,但指向對象的內容可以改變。有些像 int  * const  A ;這個變量。所以引用的初始化很重要。


4: 應用區別。總的來說,以下情況使用指針,一是考慮到可能存在不指向任何對象時候(空值);二是 存在需要指向其他對象的情況。如果需要一個指向一個一直存在的對象,並且不改變它的指向的對象就可以使用引用。



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