形參出現在函式定義中,在整個函式體內都可以使用, 離開該函式則不能使用。實參出現在主調函式中,進入被調函式後,實參變數也不能使用。 形參和實參的功能是作資料傳送。發生函式呼叫時, 主調函式把實參的值傳送給被調函式的形參從而實現主調函式向被調函式的資料傳送。1.形參變數只有在被呼叫時才分配記憶體單元,在呼叫結束時, 即刻釋放所分配的記憶體單元。因此,形參只有在函式內部有效。 函式呼叫結束返回主調函式後則不能再使用該形參變數。2.實參可以是常量、變數、表示式、函式等, 無論實參是何種型別的量,在進行函式呼叫時,它們都必須具有確定的值, 以便把這些值傳送給形參。 因此應預先用賦值,輸入等辦法使實參獲得確定值。
3.實參和形參在數量上,型別上,順序上應嚴格一致, 否則會發生「型別不匹配」的錯誤。
4.函式呼叫中發生的資料傳送是單向的。 即只能把實參的值傳送給形參,而不能把形參的值反向地傳送給實參。 因此在函式呼叫過程中,形參的值發生改變,而實參中的值不會變化。
void exchg1(int x, int y)
void exchg2(int &x, int &y)
void exchg3(int *x, int *y)
void main()
這裡exchg1函式被呼叫的時候,並沒有成功交換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的值,至此說明**是沒有任何問題的。
形參與實參的區別。
1 形參變數只有在被呼叫時才分配記憶體單元,在呼叫結束時,即刻釋放所分配的記憶體單元。因此,形參只在函式內部有效。函式呼叫結束返回主呼叫函式後則不能再使用該形參變數。2 實參可以是常量 變數 表示式 函式等,無論實參是何種型別的量,在進行函式呼叫時,它們都必須有確定的值,以便把這些值傳送給形參。因此...
形參與實參的區別
1 形參變數只有在被呼叫時才分配記憶體單元,在呼叫結束時,即刻釋放所分配的記憶體單元。因此,形參只在函式內部有效。函式呼叫結束返回主呼叫函式後則不能再使用該形參變數。2 實參可以是常量 變數 表示式 函式等,無論實參是何種型別的量,在進行函式呼叫時,它們必須有確定的值,以便把這些值傳送給形參。因此應...
形參與實參的區別
形參和實參的區別 形參出現在函式定義中,在整個函式體內都可以使用,離開該函式則不能使用。實參出現在主調函式中,進入被調函式後,實參變數也不能使用。形參和實參的功能是作資料傳送。發生函式呼叫時,主調函式把實參的值傳送給被調函式的形參從而實現主調函式向被調函式的資料傳送。1.形參變數只有在被呼叫時才分配...