C 中 引用 與取位址 的區別

2021-07-27 13:58:06 字數 1531 閱讀 8521

引用是給已定義的變數起別名

引用:在宣告的時候一定要初始化

#include using namespace std;

int main()

//引用

3)對於vector,上面2條同樣適合

vectorvec1(10,1);  //initialize vec1: 10 elements, every element's value is 1

vector&vec2 = vec1; // vec2 is  reference to vec1

vector*vec3 = &vec2; //vec3 is addresss of vec1 and vec2

--指標-對於乙個型別t,t*就是指向t的指標型別,也即乙個t*型別的變數能夠儲存乙個t物件的位址,而型別t是可以加一些限定詞的,如const、volatile等等。見下圖,所示指標的含義

char c = 'a';

char *p = &c; //p裡面存放的是c的位址

--引用-引用是乙個物件的別名,主要用於函式引數和返回值型別,符號x&表示x型別的引用。見下圖,所示引用的含義:

int i=1;

int &r = i;    //此時i=r=1

若執行r=2;//此時i=r=2

int *p = &r;  //p指向r;

指標和引用的區別

而宣告指標是可以不指向任何物件,也正是因為這個原因,使用指標之前必須做判空操作,而引用就不必。

2.其次,引用不可以改變指向,對乙個物件"至死不渝";但是指標可以改變指向,而指向其它物件。說明:雖然引用不可以改變指向,但是可以改變初始化物件的內容。例如就++操作而言,對引用的操作直接反應到所指向的物件,而不是改變指向;而對指標的操作,會使指標指向下乙個物件,而不是改變所指物件的內容。

3.再次,引用的大小是所指向的變數的大小,因為引用只是乙個別名而已;指標是指標本身的大小,4個位元組

4.最後,引用比指標更安全。由於不存在空引用,並且引用一旦被初始化為指向乙個物件,它就不能被改變為另乙個物件的引用,因此引用很安全。對於指標來說,它可以隨時指向別的物件,並且可以不被初始化,或為null,所以不安全。const 指標雖然不能改變指向,但仍然存在空指標,並且有可能產生野指標(即多個指標指向一塊記憶體,free掉乙個指標之後,別的指標就成了野指標)

總之,用一句話歸納為就是:

指標指向一塊記憶體,它的內容是所指記憶體的位址;而引用則是某塊記憶體的別名,引用不改變指向。

C 中 引用 與取位址 的區別

乙個是用來傳值的 乙個是用來獲取首位址的 引用 出現在變數宣告語句中位於變數左邊時,表示宣告的是引用.例如 int rf 宣告乙個int型的引用rf.取位址運算子 在給變數賦初值時出現在等號右邊或在執行語句中作為一元運算子出現時 表示取物件的位址.在c 中,既有引用又有取位址,好多人對引用和取位址不...

C中引用 與取位址 的區別

乙個是用來傳值的 乙個是用來獲取首位址的,引用運算子 出現在變數宣告語句中位於變數左邊時,表示宣告的是引用.例如 int reference 宣告乙個int型的引用rf.取位址運算子 在給變數賦初值時出現在等號右邊或在執行語句中作為一元運算子出現時,表示取物件的位址.在c 中,既有引用又有取位址,好...

C 中 引用 與取位址 的區別

乙個是用來傳值的 乙個是用來獲取首位址的 引用 出現在變數宣告語句中位於變數左邊時,表示宣告的是引用.例如 int rf 宣告乙個int型的引用rf.取位址運算子 在給變數賦初值時出現在等號右邊或在執行語句中作為一元運算子出現時 表示取物件的位址.在c 中,既有引用又有取位址,好多人對引用和取位址不...