- 形參出現在函數定義中,在整個函數體內都可以使用,離開該函數則不能使用。
- 實參出現在主調函數中,進入被調函數后,實參變量也不能使用。
- 形參和實參的功能是作數據傳送。發生函數調用時,主調函數把實參的值傳送給被調函數的形參從而實現主調函數向被調函數的數據傳送。
- 形參:全稱為"形式參數"是在定義函數名和函數體的時候使用的參數,目的是用來接收調用該函數時傳如的參數.
- 實參:全稱為"實際參數"是在調用時傳遞個該函數的參數.
void Exchg1(int x, int y) { int tmp; tmp=x; x=y; y=tmp; printf("Exchg1:x=%d,y=%d\n",x,y); } void Exchg2(int &x, int &y) { int tmp; tmp=x; x=y; y=tmp; printf("Exchg2:x=%d,y=%d\n",x,y); } void Exchg3(int *x, int *y) { int tmp; tmp=*x; *x=*y; *y=tmp; printf("Exchg3:x=%d,y=%d\n",*x,*y); } void main() { int a=4,b=6; Exchg1 (a,b) ; printf("a=%d,b=%d\n",a,b); Exchg2 (a,b); printf("a=%d,b=%d\n",a,b); Exchg3(&a,&b) ; printf("a=%d,b=%d\n",a,b); }
int a=4,b=6; Exchg1 (a,b) ; //這里本質上發生的是:Exchg1 (intx=a,int y=b) ; x跟y是函數定義里面的形參,也就是說這里只是把實參a跟b的值賦予了x,y這2個形參變量。接下來,函數里發生的值互換只換掉了x跟y的值,而實參a跟b沒有影響。
Exchg2 (a,b); //再看本質Exchg2 (int &x=a,int &y=b); 這里x跟y都是a,b的引用,操作x跟y交換就等於a跟b交換,自然,調用Exchg2 可以成功交換a跟b
Exchg3(&a,&b) ; //Exchg3(int *x=&a,int *y=&b); x跟y2個形參是a跟b的指針,也就是實參數據存放的地址。然后函數里交換了x跟y指向的數據,也就是實參a跟b,所以,交換也是成功的。
代碼運行的結果,exchg1沒有交換a,b值;exchg2交換了a,b值,到了exchg,a,b的值似乎沒有交換,仍舊是a為4,b為6,剛開始以為代碼有問題,后來設置了斷點之后,發現代碼運行到exchg3(&a,&b)時,a=6,b=4了,所以代碼運行結果和初始值一樣的話,說明已經交換了a,b的值,至此說明代碼是沒有任何問題的。