引用與指標的區別

來源:酷知科普網 9K

常常有人問引用與指標的區別,可能是指標和引用在功能上的相似,而是他們混淆這兩個概念,
現在總結以下二者的區別,希望大家能徹底弄清這兩個概念根本性的差別

步驟/方法

(01)引用,一個變數的別名,為什麼引入別名呢?原因是我們想定義一個變數,他共享另一個變數的記憶體空間,使用別名無疑是一個好的選擇。變數是什麼?是一個記憶體空間的名字,如果我們給這個記憶體空間在起另外一個名字,那就是能夠共享這個記憶體了,引用(別名)的由此而來。指標,指向另一個記憶體空間的變數,我們可以通過它來索引另一個記憶體空間的內容,本身有自己的記憶體空間。

引用與指標的區別

(02)二者區別:引用訪問一個變數是直接訪問,而指標是間接訪問。引用是一個變數的別名,本身不單獨分配自己的記憶體空間,而指標有自己的記憶體空間。引用在開始的時候就繫結到了一個記憶體空間(開始必須賦初值),所以他只能是這個記憶體空間的名字,而不能改成其他的,當然可以改變這個記憶體空間的值.例如int i = 3,j = 4;int &x = i;//成為i的別名x = j;//不能否認x仍然引用i,並沒有成為j的別名,只是修改了x和j共享的記憶體空間的值.這點與指標不同,指標在任何時刻都可以改變自己的指向

引用與指標的區別 第2張

(03)你無法讓引用與其指示物分離。和指標不同,一旦引用和物件繫結,它無法再被重新指向其他物件。引用本身不是一個物件(它沒有標識;當試圖獲得引用的地址時,你將的到它的指示物的地址;記住:引用就是它的指示物 )。從某種意義上來說,引用類似 int* const p 這樣的const指標(並非如 const int* p這樣的指向常量的指標)。不管有多麼類似,請不要混淆引用和指標;它們完全不同。何時該使用引用, 何時該使用指標?儘可能使用引用,不得已時使用指標。

引用與指標的區別 第3張

(04)當你不需要“重新指向(reseating)”時,引用一般優先於指標被選用。這通常意味著引用用於類的公有介面時更有用。引用出現的典型場合是物件的表面,而指標用於物件內部。上述的例外情況是函式的引數或返回值需要一個“臨界”的引用時。這時通常最好返回/獲取一個指標,並使用 NULL指標來完成這個特殊的使命。(引用應該總是物件的別名,而不是被解除引用的 NULL 指標)。注意:由於在呼叫者的程式碼處,無法提供清晰的的引用語義,所以傳統的 C 程式設計師有時並不喜歡引用。然而,當有了一些 C++經驗後,你會很快認識到這是資訊隱藏的一種形式,它是有益的而不是有害的。就如同,程式設計師應該針對要解決的問題寫程式碼,而不是機器本身。

引用與指標的區別 第4張
熱門標籤