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