C 指標與引用的異同

2022-09-25 05:00:18 字數 1024 閱讀 1407

目錄

指標和引用的原理非常的相似,所以很多時候尤其是面試的時候經常會拿來比較。

本文來梳理一下引用和指標的一些異同。

兩者都是關於位址的概念。

指標本身是乙個變數,它儲存的值是一塊記憶體位址,而引用是某乙個記憶體的別名。我們可以使用指標或引用修改對應記憶體的值。

我們無法宣告乙個變數引用再給它賦值,只能在宣告的同時進行初始化:

int a = 3;

int &b; // 非法

int &c = a; // 合法

而指標沒有這個限制:

int *p; // 合法

引用一旦宣告無法更改,但指標可以。某種程度上來說,引用類似於常量指標。

int a = 3;

int &b = a;

int const *p = &a;

這是兩者乙個使用上巨大的區別,我們拿到乙個引用可以放心地使用, 因為它一定不會為空。而指標則不然,有可能為空指標,必須要經過判斷才能使用。

sizeof函式可以計算變數記憶體塊的大小,但如果我們對指標使用sizeof得到的是指標這個變數本身的占用記憶體大小,而不是指標指向的變數的記憶體大小。而引用則沒有這個問題。

我們先來看引用的指標:

int a = 3;

int &b = a;

int *p = &b;

這段**並不會報錯,但如果我們真的去執行了,會發現p就是乙個普通的int型指標,它指向的是變數a。因為b是乙個引用,它的位址和a相同。所以我們定zhdjof義乙個指向b的指標,實際上就是定義指向a的指標。這也是指向引用的指標不存在的原因。

再來看看指標的引用,指標的引用是存在的,也很好理解,本質上就是指標的乙個別名:

int a = 3;

int *p = &a;

int *&pt = p;

pt也可以指向別的變數,也可以修改解引用的值,使用上它和p沒有任何區別。

除了上面說的這些之外,指標和引用還在一些細小的方面有一些差別。例如自增和自減的含義不同,指標的自增和自減代表的是指標的移動,而引用的自增自減則是變數的值發生變化。

c 指標和引用異同

說白了c 中的引用就是指標。至少底層實現是這樣。乙個例子說明。一下 include int main int argc char argv 1 include 2 3 int main int argc char argv 4 00401057 pop edi 00401058 pop esi 00...

C 指標和引用的異同點

相同點 不同點 指標是乙個實體,而引用僅僅是乙個別名 在使用時候引用無需解引用,而指標需要解引用 指標只能在定義時別初始化一次,之後不可在變,指標一般可變 除非常量指標 引用不能為空而指標可以為空 sizeof引用 得到的是所指向的物件的大小,而 sizeof指標 得到的是指標本身的大小 聯絡 引用...

C 之指標和引用的異同點

指標和引用看上去很像,但他們有著很大的區別 指標和引用的本質區別是 指標是乙個實體變數,而引用是乙個物件的別名。基於此區別,指標和引用就有了很多不同的應用不同。首先,引用不能為空,沒有物件又怎麼會有別名呢,指標本身就是個物體,記憶體值可以隨意。指標可以隨便變化,而引用只能初始化一次不可賦值 引用相當...