c或c++中函式的引數傳遞包括:值傳遞、指標傳遞、引用傳遞這三種方法。
以經典的交換兩個整數為例:
問題描述:
輸入描述:兩個待交換的整數。
程式輸出:交換後的兩個整數。
#includevoid myswap(int x, int y)
int main()
#include//指標傳遞,函式體內只有指標值的變化
void myswap(int *p1, int *p2)
//指標傳遞,函式體內只有指標的變化
void myswap2(int *p1,int *p2)
int main()
#includevoid myswap(int &x, int &y) //這裡的形參為引用型別,引用與實參進行繫結,作為實參的別名
int main()
值傳遞:
輸入:2 3
輸出:2 3
指標傳遞:
輸入:2 3
輸出:3 2
引用傳遞:
輸入:2 3
輸出:3 2
在第乙個程式中,傳值不成功的原因是指在形參(x、y)上改變了數值,沒有在實參(a、b)上改變量值。
值傳遞:值傳遞傳遞的是實際引數的乙個副本,只是將輸入a、b的值拷貝給了x、y,然而交換函式對x、y的操作只是對臨時分配的棧中內容進行操作,函式執行完後形參就消失,對實際a、b不產生影響。
在第二個程式中,傳位址成功的原因利用指標改變了原來的位址,所以實參就交換了。
指標傳遞:將形參指標p1、p2指向a、b的位址,交換函式是將指標指向位址中的值進行交換,而不是交換p1、p2指向的位址,因此第二個程式中,第乙個交換函式可以實現a、b值交換,第二個交換函式無法實現a、b值的交換。
在第三個程式中,引用是直接改變兩個實參變數a,b的值,所以就交換了。這裡的形參為引用型別,引用與實參進行繫結,作為實參的別名。所以,使用引用型別,傳入實參後,函式對引用的操作,就是對實參的操作,所以實參會發生變化。
引用傳遞:引用傳遞時,對形參的操作等同於對實參的操作,即傳遞的不會是實參的副本,而就是實參。
c c 中函式的引數傳遞
c c 中,函式可以傳遞的引數有三種形式,值 引用和指標。下面來看一段 看看三種傳遞方式產生的結果。include include using namespace std void change1 int n void change2 int n void change3 int n int mai...
C C 中函式引數傳遞詳解
昨天看了記憶體管理的有關內容,有一點了解,但不是很深入,發現之前寫 時有很多細節問題沒有注意到,只知道這樣做可以實現功能,卻不知道為什麼可以這樣,對於採用自己的方法造成的隱患也未知,更不曉得還有其他方法可以實現,我們知道c 強大的乙個原因是因為對於乙個問題的答案多種解答方法或思路,我想著也許就是它難...
C C 中函式引數傳遞詳解
首先 c 中引數傳遞方式 一般來說,c裡面有兩種傳遞 1 值傳遞 2 指標傳遞 嚴格來看,只有一種傳遞,值傳遞,指標傳遞也是按值傳遞的,複製的是位址。c 裡面有三種傳遞方法 1 值傳遞 2 指標傳遞 3 引用傳遞 但是嚴格來看,是兩種,其實指標傳遞也是值傳遞,只不過是值傳遞的是位址。下面是部分 先看...