一、指標和引用的定義和性質區別:
(1) 指標:指標是乙個變數,只不過這個變數儲存的是乙個位址,指向記憶體的乙個儲存單元,即指標是乙個實體;而引用跟原來的變數實質上是同乙個東西,只不過是原變數的乙個別名而已。如:
int a=1;int
*p=&a;
int a=1;int &b=a;
上面定義了乙個整形變數和乙個指標變數p,該指標變數指向a的儲存單元,即p的值是a儲存單元的位址。
而下面2句定義了乙個整形變數a和這個整形a的引用b,事實上a和b是同乙個東西,在記憶體占有同乙個儲存單元。
(2) 可以有const指標,但是沒有const引用;
(3) 指標可以有多級,但是引用只能是一級(int **p;合法 而 int &&a是不合法的)
(4) 指標的值可以為空,但是引用的值不能為null,並且引用在定義的時候必須初始化;
(5) 指標的值在初始化後可以改變,即指向其它的儲存單元,而引用在進行初始化後就不會再改變了,從一而終。
(6)」sizeof引用」得到的是所指向的變數(物件)的大小,而」sizeof指標」得到的是指標本身的大小;
(7)指標和引用的自增(++)運算意義不一樣;
二、相同點
都是位址的概念;
指標指向一塊記憶體,它的內容是所指記憶體的位址;
引用是某塊記憶體的別名。
三、聯絡
1、引用在語言內部用指標實現(如何實現?)。
2、對一般應用而言,把引用理解為指標,不會犯嚴重語義錯誤。引用是操作受限了的指標(僅容許取內容操作)。
引用是c++中的概念,初學者容易把引用和指標混淆一起。以下程式中,n是m的乙個引用(reference),m 是被引用物(referent)。
int m;
int &n = m;
n 相當於m 的別名(綽號),對n 的任何操作就是對m 的操作。
引用的一些規則如下:
(1)引用被建立的同時必須被初始化(指標則可以在任何時候被初始化)。
(2)不能有null 引用,引用必須與合法的儲存單元關聯(指標則可以是null)。
(3)一旦引用被初始化,就不能改變引用的關係(指標則可以隨時改變所指的物件)。
以下示例程式中,k 被初始化為i 的引用。語句k = j 是把k 的值改變成為6,由於k 是i 的引用,所以i 的值也變成了6.
int i = 5;
int j = 6;
int &k = i;
k = j; // k 和i 的值都變成了6
上面的程式看起來象在玩文字遊戲,沒有體現出引用的價值。引用的主要功能是傳遞函式的引數和返回值。c++語言中,函式的引數和返回值的傳遞方式有三種:值傳遞、指標傳遞和引用傳遞。
「引用傳遞」的性質像「指標傳遞」,而書寫方式像「值傳遞」。實際上「引用」可以做的任何事情「指標」也都能夠做,為什麼還要「引用」這東西?
答案是「用適當的工具做恰如其分的工作」。
指標能夠毫無約束地操作記憶體中的如何東西,儘管指標功能強大,但是非常危險。
就象一把刀,它可以用來砍樹、裁紙、修指甲、理髮等等,誰敢這樣用?
如果的確只需要借用一下某個物件的「別名」,那麼就用「引用」,而不要用「指標」,以免發生意外。比如說,某人需要乙份證明,本來在檔案上蓋上公章的印子就行了,如果把取公章的鑰匙交給他,那麼他就獲得了不該有的權利。
總的來說,在以下情況下你應該使用指標:
一是你考慮到存在不指向任何物件的可能(在這種情況下,你能夠設定指標為空),
二是你需要能夠在不同的時刻指向不同的物件(在這種情況下,你能改變指標的指向)。如果總是指向乙個物件並且一旦指向乙個物件後就不會改變指向,那麼你應該使用引用。
還有一種情況,就是當你過載某個操作符時,你應該使用引用。
盡可能使用引用,不得已時使用指標。
當你不需要「重新指向」時,引用一般優先於指標被選用。這通常意味著引用用於類的公有介面時更有用。引用出現的典型場合是物件的表面,而指標用於物件內部。
指標和引用的相同點和不同點
相同點 都是位址的概念 指標指向一塊記憶體,它的內容是所指記憶體的位址 而引用則是某塊記憶體的別名。不同點 指標是乙個實體,而引用僅是個別名 引用只能在定義時被初始化一次,之後不可變 指標可變 引用 從一而終 指標可以 見異思遷 引用沒有const,指標有const,const的指標不可變 引用不能...
指標和引用的相同點和不同點
一 指標 下面這個超連結是之前寫的關於指標的詳解 指標詳解 二 引用 引用就是某一變數 目標 的乙個別名,對引用的操作與對變數直接操作完全一樣。簡單點說就是宣告乙個識別符號為引用,就表示該識別符號是另乙個物件的外號。三 引用和指標的相同點 1 指標和引用都可以優化傳參效率 2 都是位址的概念 指標指...
c 指標和引用的區別(相同點和不同點)
引用 別名 一定要初始化 int c error 引用 不能引用 不可以取位址的資料 如常量 引用不能改變 引用只能使用 引用變數 所引用的資料 底層使用指標支援,在所有變數使用的地方系統會自動解引用 int a 10 int b a b c 錯誤,引用不能改變int a 10 錯誤,引用型別的初始...