【C++筆記】函式中引數傳遞
阿新 • • 發佈:2019-02-07
函式中引數是如何傳遞的呢?
在《C++Primer》一書中提到:
“Each time we call a function, its parameters are created and initialized by the arguments passed in the call。”(每次呼叫函式時,都會重新建立該函式所有的形參,此時所傳遞的實參將會初始化對應的形參。)
可能會有點模糊,說白了就是在呼叫函式時,如果函式中有引數,則函式中的引數會先被創建出來,然後把傳入函式的實參的值一一賦值給你所建立的引數,而這個你所建立的引數就是上面所說的形參。
理解函式中的引數的傳遞也是挺重要的,這也有助於你在實現函式的這類方法的時候靈活得到應用。
關於函式的傳遞,其它的不多說,這裡我們就來處理一個問題就行了,這問題如下:
通過函式來改變現有實參的值。
感覺好像很簡單,其實這當中如果你不瞭解其中引數傳遞的本質,可能會處理不好這個問題。
舉個簡單的例子,看以下程式碼:
#include<iostream> using namespace std; void Swap(int a, int b){ int temp; temp = a; a = b; b = temp; } int main() { int a = 1, b = 2; cout << "交換前:" << endl; cout << "a = " << a << "\t" << "b = " << b << endl; Swap(a, b); cout << "交換後:" << endl; cout << "a = " << a << "\t" << "b = " << b << endl; <span style="white-space:pre"> </span>return 0; }
這裡嘗試著兩個int型的變數值進行交換,結果如下:
如果我們想對兩個int型變數的值進行交換,Swap函式並不可以實現真正的交換。為什麼?函式體裡不是實現了交換了嗎?是的,的確是進行交換了,但是交換的是實參的拷貝。
上面一開始就有提到,函式被呼叫時,函式形參被建立並賦值為實參的值。但是這並不會影響實參現有的值,即實參值保持不變。
所以這裡如果要進行真正值得交換,有很多方法,比如形參作為引用再把實參傳入:
void Swapanother(int &a, int &b){
int temp;
temp = a;
a = b;
b = temp;
}
呼叫如下:
或是形參作為指標,把實參地址傳入:Swapanother(a, b);
void Swap(int *a, int *b){
int temp;
temp = *a;
*a = *b;
*b = temp;
}
呼叫如下:
Swap(&a, &b);
這兩種方法都可以改變實參的值,結果如下:
總結:
1.呼叫函式時函式中的引數會先另外創建出來,然後再其賦予對傳入實參的值。
2.修改傳入實參的值可以通過形參引用或者指標傳址的方式修改。