引用(Reference)與指標(Pointer)

2021-06-20 10:30:55 字數 1406 閱讀 8877

與pointer類似,reference也是乙個物件(object),可以用來間接指向另乙個物件。reference的宣告與pointer的宣告的實質語法結構是相同的。不同的是,宣告pointer的時候使用星號操作符*,而宣告reference的時候使用位址操作符&。

int i = 3;

int *pi = &i;//宣告 pi 為乙個指標型別的物件,並且是乙個」指向int整型的指標」,它的初始值為物件i的位址。

int &ri = i;//宣告 ri為乙個reference型別的物件,並且也是乙個指向整型的reference,它指向的是i。

pointer 和reference的最大不同是:pointer必須使用乙個星號操作符*進行解引用操作,而reference不需要任何操作符,這裡可以將reference看成是乙個高階的指標。

下面通過記憶體的儲存形式來理解這一點。

*p = 4; //使用pointer將i的值變為4

ri = 4; //使用reference 將i的值變為4 。

1 指標變數能夠可以被重新賦值很多次,但是引用不可以,引用一旦初始化賦值後就不可以再對其重新賦值,有點像常量指標。

引用一般被理解為對某個變數其別名。對引用的操作與對應變數的操作的效果完全一樣。如果再將該別名與另外乙個變數聯絡在一起,就會出現乙個名字(別名)對應兩個變數,很明顯這不正確。

簡而言之,乙個pointer在它的有生之年可以指向許多不同的物件,而乙個reference只能夠指向乙個物件。所以,乙個reference就必須在一出生就被繫結。否則這個reference就永遠不能被繫結到任何東西,也就毫無用處了。

int &ri = i;//將 ri 繫結到 i 。然後下面的賦值:

ri = j;//並不是把 ri 繫結到 j ,而是將 j 中的值賦給 ri 指向的物件,也就是賦給 i 。

2 乙個有效的reference必須指向乙個物件;而乙個指標不需要,例如null指標不指向任何位置。

這點在應用中十分廣泛,當你想要確信乙個引數必須指向乙個物件的時候,應該使用reference作為引數型別。 例如,交換函式(swap function),它接受兩個int引數,並將兩個引數的數值對調,如下所示:

int i, j;

swap(i, j);

而將原本在i中的值放到j中, 並將原本在j中的值放到i中。我們可以這樣寫這個函式:

void swap(int *v1, int *v2)

這種定義下,函式要像這樣被呼叫: swap(&i, &j);

Java引用機制 reference

所謂引用傳遞就是指將堆記憶體空間的使用權交給多個棧記憶體空間。例子 1 例子 2 其中傳遞的是string物件,由於string的內容是不可以修改,所以str1的值還是hello,如果傳遞的是物件的string屬性,那是可以修改的 例子 3 傳遞的是物件的string屬性 一對一關係 例子 乙個人對...

C 中的引用 reference

提交者 eastvc 發布日期 2003 11 22 14 44 07 原文出處 http objects.nease.net 1.簡介 2.引用的語法 3.引用使用技巧 3.1 引用和多型 3.2 作為引數 3.3 作為返回值 3.4 什麼時候使用引用 4.參考資料 1.簡介 引用是c 引入的新語...

理解 C 中的引用 Reference

常引用引用作為返回值 更多細節 引用是乙個別名,也就是某個已存在的變數的另乙個名字。對某個物件的引用進行操作,就是直接對這個物件進行操作。建立乙個引用的語句如下 型別識別符號 引用變數名 目標變數名 例如 原始變數 int a double b 宣告引用變數 int ref a a double r...