函式引數的不同和「誇張」的引用

2021-08-09 23:25:38 字數 926 閱讀 7074

函式的形參的可能性有,變數,指標,陣列和引用。

先來看變數。

int fun(int a,int b)      例如此函式形參是兩個變數,它們的儲存位址和主調函式裡的實參是不同的,所以

這就談到了傳址呼叫。

什麼是傳址呼叫那?

就是形參是乙個指標,他接受的是乙個位址。當它是陣列的時候,它退化成了乙個指向陣列首元素的位址的指標;指標就是指向實參的位址;在這裡

要重點說說引用的作用。

引用的符號是&,那系統什麼時候認為它是引用那?

當&符號在兩個變數之間時,系統就把它定義為位運算子,當&符號在賦值運算子和乙個變數或陣列的中間時,就是取其位址,當&在乙個型別名和乙個變數中間   

時,就代表了引用。

引用代表什麼意思那?

就比如乙個人叫林淺雪,她的小名叫小雪,引用就相當於她的別名,我們可以通過小雪找到她,也可以通過她的大名找到她。

當引用作為形參時,編譯器就會將其變成,指標的形式,就相當於

(型別)*const 變數   形式。由此可以看出,它的指向不可以變,但是它指向的內容卻可以變。

那引用有什麼限制?

1: 引用沒有二級,或者說**。

2:引用在定義的時候必須初始化。

可能有人會問,不是說引用在定義的時候必須初始化,那當引用是形參的時候不是就沒有初始化了嗎?

6:  int *b=&a;

012d15f5  lea         eax,[a]

012d15f8  mov         dword ptr [b],eax

7:  int &c=a;

012d15fb  lea         eax,[a]

012d15fe  mov         dword ptr [c],eax

如圖:是反彙編裡面對引用的處理,由此可以看出,編譯器把引用與指標做了一樣的處理。

指標與引用做引數的不同

指標和引用一直是學習c 時的乙個難點,不知道什麼時候應該用指標,什麼時候應該用引用。下面是指標與引用做為函式時的不同,看了之後,也許上面的問題就不是問題了,呵呵。1.兩者都可以不用複製變元而提高效率,但是指標的傳遞實際上是複製了指標的,而引用沒有複製。2.雖然兩者都可以改變變元的值。但是如果函式引數...

指標和引用作為引數的不同(一)

總的來說,在以下情況下你應該使用指標 一是你考慮到存在不指向任何物件的可能 在這種情況下,你能夠設定指標為空 二是你需要能夠在不同的時刻指向不同的物件 在這種情況下,你能改變指標的指向 如果總是指向乙個物件並且一旦指向乙個物件後就不會改變指向,那麼你應該使用引用。摘自 more effective ...

C 引用與引用作為函式的引數

c 引用與引用作為函式的引數 參考 對乙個資料建立乙個 引用 他的作用是為乙個變數起乙個別名。這是c 對c語言的乙個重要補充。如何建立乙個引用 int a 5 int b a cout 列印結果 從上述結果可以看到,a與b位址是相同的。使用引用的一些注意事項 1 宣告乙個引用時,必須同時使之初始化,...