概論
我認為的形參和實參是這樣的,形參是形式上的參量,和“抽象類”的概念差不多,不是實際存在的。不用的時候不占用內存,被調用的時候分配內存,調用結束,釋放內存。類似於“抽象類”還有一點就是在抽象類方法和屬性被應用的時候需要實例化,然而形參在用的時候必須有實參的傳遞。實參就是實際存在的東西,它在應用的時候一些具有確定的值,可以通過賦值、輸入等一系列動作讓實參獲得確定值。流向是這樣的:“實參——>形參(單向傳送)”。
區別
1、形參變量只有在被調用的時候才會分配內存,在調用結束的時候,即刻釋放所分配的內存單元。因此,形參只有在函數內部有效,函數調用結束后返回主調函數后則不能再使用形參變量。
2、實參可以是常量、變量、表達式、函數等,無論實參是何種類型的量,在進行函數調用時,他們都必須具有確定的值,以便把這些值傳送給形參。因此需要預先給用賦值,輸入等方法讓實參獲得確定值。
如下圖:
3、實參和形參在數量上、類型上、順序上應嚴格一致,否則會發生“類型不匹配”的錯誤。
4、函數調用中發生的數據傳遞是單向的,即只能把實參的值傳送給形參,而不能把形參的值反向傳遞給實參。因此在函數調用過程中,形參的值發生改變,而實參的值不會變化。
“值”與“址”
在C#中,形參和實參這里也涉及到了“值傳遞”和“地址傳遞”
其中重要的是:
值傳遞:就是形參改變,不會影響實參的變化。
地址傳遞:形參的更改影響實參。
傳值的過程中:
1) 形參和實參各自占一個獨立的存儲空間。
2) 形參的存儲空間是被調用的時候才分配的,調用開始,系統為形參開辟了一個臨時的存儲區,然后將各實參之值傳遞給形參,這時形參就得到了實參的值。
3) 當函數被返回時,臨時存儲區也被撤銷了。
4) 傳值的特點:單向傳遞,即函數中對形參變量的操作不會影響到調用函數中的實參變量。
傳地址過程中:
參數是地址,實參和形參共享一個存儲單元相當於將實參的地址賦予給了形參,這時候對形參的改變就相當於對實參的改變。此時的參數傳遞是雙向傳遞。
結語