C 中的引用

2021-08-20 16:27:20 字數 1888 閱讀 6682

c語言中,函式傳遞引數的方式有兩種:

1.傳值

void swap(int x, int y)//傳值

●以傳值方式傳遞的引數,在函式呼叫過程中,會在目標函式內生成所要傳遞引數的臨時拷貝(形參),當函式結束時,形參即銷毀

●優點:避免了函式呼叫的***

●缺點:無法改變實參的值

2.傳址(位址)

void swap(int* p1,int * p2)

在c++中,結合了上面兩種傳遞引數方式的優點,引入了引用。

●引用不是新定義乙個變數,而是給已存在的變數取了乙個別名,編譯器不會為引用開闢記憶體空間,它和它引用的變數共用同一塊記憶體空間

●型別& 引用變數名(物件名)=引用實體;

引用變數型別必須與引用實體一致

eg:

void test()

//該程式列印的兩個位址完全相同

引用的特性

引用在定義時必須初始化

void test()

乙個變數可以有多個引用

void test()

引用一旦引用乙個實體,再不能引用其他實體

void test()

挖掘引用內部的操作方式

用引用的方式交換兩個引數的數值

void swap(int& a,int& b)

int main()

找出它的彙編**:

函式傳遞引用時,也是將物件的位址傳給函式的引數,當在函式內部用到引用的物件時,程式的底層會自動進行解引用

用傳址的方式交換兩個引數的數值

void swap(int* a,int* b)

int main()

找出它的彙編**:

對比引用和傳址的彙編**發現它們的彙編**完全相同

普通型別的引用在底層對應的指標為—>型別名 * const p

指標和引用的區別

引用在定義時必須初始化;指標可以不初始化

引用的一生只可以和乙個物件相結合;指標則可以根據需要指向不同的物件

指標+數值=便偏移指標指向;引用+數值=>給引用的物件賦值

指標無論指向什麼物件,在32位平台上sizeof(指標)=4;sizeof(引用)=引用物件所占用的位元組

有多級指標;沒有多級引用

指標需要手動定址;引用則通過編譯器自動定址

引用比指標更加安全

傳值、傳址、引用的效率比較:

●傳值過程中,函式會為臨時變數開闢新的空間,而傳址和引用沒有新空間的開闢,所以傳值相較傳址和引用來講,它的效率較低

●我們在上面已經看到,傳址和引用在底層的操作方法是完全相同的,所以它們的效率應該是相差不大的。

C 中的引用

最近重新看c 看到些以前沒注意的dd,溫故而知新,暫且記下。引用是能自動間接引用的一種指標,即不必使用間接引用運算子 就可以得到乙個引用值。引用可以為變數起別名,它主要用作函式引數以及函式的返回型別。1 引用的定義 如 int i int j i j是i的引用。1 定義引用時,必須立即對它進行初始化...

C 中的引用

例1 int a int ra a 定義引用ra,它是變數a的引用,即別名 說明 1 在此不是求位址運算,而是起標識作用。2 型別識別符號是指目標變數的型別。3 宣告引用時,必須同時對其進行初始化。4 引用宣告完畢後,相當於目標變數名有兩個名稱,即該目標原名稱和引用名,且不能再把該引用名作為其他變數...

C 中的引用

引用是c 引入的新語言特性,是c 常用的乙個重要內容之一,正確 靈活地使用引用,可以使程式簡潔 高效。我在工作中發現,許多人使用它僅僅是想當然,在某些微妙的場合,很容易出錯,究其原由,大多因為沒有搞清本源。故在本篇中我將對引用進行詳細討論,希望對大家更好地理解和使用引用起到拋磚引玉的作用。一 引用簡...