該方法把引數的實際值複製給函式的形式引數。在這種情況下,修改函式內的形式引數對實際引數沒有影響。
#include
using
namespace
std;
// 函式宣告
void swap(int x, int y);
int main ()
// 函式定義
void swap(int x, int y)
呼叫函式的時候,在函式內部開闢了兩個變數,x=a,y=b,然後對這兩個區域性變數進行操作,函式執行完畢之後隨即銷毀。
交換前,a 的值: 100
交換前,b 的值: 200
交換後,a 的值: 100
交換後,b 的值: 200
該方法把引數的位址複製給形式引數。在函式內,該位址用於訪問呼叫中要用到的實際引數。這意味著,修改形式引數會影響實際引數。
#include
using
namespace
std;
// 函式宣告
void swap(int *x, int *y);
int main ()
// 函式定義
void swap(int *x, int *y)
int* x=&a, int* y=&b,此時x,y分別為a,b的位址,函式中交換了位址x,y對應的值,因而在函式外部相當於a,b的位址不變,交換了a,b的值。
交換前,a 的值: 100
交換前,b 的值: 200
交換後,a 的值: 200
交換後,b 的值: 100
該方法把引數的引用複製給形式引數。在函式內,該引用用於訪問呼叫中要用到的實際引數。這意味著,修改形式引數會影響實際引數。
#include
using
namespace
std;
// 函式宣告
void swap(int &x, int &y);
int main ()
// 函式定義
void swap(int &x, int &y)
&x=a,&y=b,x,y分別是a,b的引用,也就是別名,也就是x和a,y和b是相同的東西,
x和a具有相同的位址相同的值,y和b具有相同的位址相同的值。因而在函式內部對變數的操作等價於在函式外部對變數的操作。
交換前,a 的值: 100
交換前,b 的值: 200
交換後,a 的值: 200
交換後,b 的值: 100
參考
傳值呼叫和引用呼叫
值呼叫是指當發生函式呼叫時候,給形參分配記憶體空間,並用實參來初始化形參 直接將實參的值傳遞給形參 這一過程是引數值的單向傳遞過程,一旦形參獲得了值,便於實參脫離了關係,此後無論形參發生了什麼變化,都不影響實參了.引用呼叫將引用作為形參,在執行主調函式中的呼叫語句時候,系統自動用實參來初始化形參.這...
引用呼叫和傳值呼叫
1.傳值呼叫又分為資料傳值呼叫和位址傳值呼叫。資料傳值呼叫方式是將實參的資料值傳遞給形參。實參和形參在棧空間內的位址不相同,改變形參值不影響實參值 位址傳值呼叫方式是將實參的位址值傳遞給形參,實參和形參在棧空間內共用同一位址,改變形參值就可改變實參值。2.引用呼叫是將實參變數值傳遞給形參,而形參是實...
C 之傳值呼叫和引用呼叫
如果希望函式能夠改變某變數的值,那麼相應的形參一定要是引用呼叫引數。因此必須在引數型別後面加上 符號。傳值呼叫形參只是乙個區域性變數。當一組資料需要多個函式處理時候,也要用引用呼叫。到目前為止我們一直使用傳值呼叫形參,函式呼叫裡的相應的形參可以是乙個變數,但函式只使用該變數的值,而且不能以任何方式改...