函式返回值作為形參存在的問題以及形參和實參的區別
一、問題描述
若已定義的函式有返回值,則以下關於該函式呼叫的敘述中錯誤的是( D )
(A)函式呼叫可以作為獨立的語句存在。
(B)函式呼叫可以作為一個函式的實參。
(C)函式呼叫可以出現在表示式中。
(D)函式呼叫可以作為一個函式的形參。
解析:函式返回值存在暫存器中(暫存器在CPU裡面,不在記憶體裡面), 沒有地址, 因此不能作為形參,但可以作為實參。
二、形參與實參區別
形參出現在函式定義中,在整個函式體內都可以使用, 離開該函式則不能使用。 實參出現在主調函式中,進入被調函式後,實參變數也不能使用。形參和實參的功能是作資料傳送。發生函式呼叫時, 主調函式把實參的值傳送給被調函式的形參從而實現主調函式向被調函式的資料傳送。
-
形參變數只有在被呼叫時才分配記憶體單元,在呼叫結束時, 即刻釋放所分配的記憶體單元。因此,形參只有在函式內部有效。 函式呼叫結束返回主調函式後則不能再使用該形參變數。
-
實參可以是常量、變數、表示式、函式等, 無論實參是何種型別的量,在進行函式呼叫時,它們都必須具有確定的值, 以便把這些值傳送給形參。 因此應預先用賦值,輸入等辦法使實參獲得確定值。
-
實參和形參在數量上,型別上,順序上應嚴格一致(除非是有預設值引數), 否則會發生“型別不匹配”的錯誤。
-
函式呼叫中發生的資料傳送是單向的。 即只能把實參的值傳送給形參,而不能把形參的值反向地傳送給實參。 因此在函式呼叫過程中,形參的值發生改變,而實參中的值不會變化。
-
當形參和實參不是指標型別時,在該函式執行時,形參和實參是不同的變數,他們在記憶體中位於不同的位置,形參將實參的內容複製一份,在該函式執行結束的時候形參被釋放,而實參內容不會改變。而如果函式的引數是指標型別變數,在呼叫該函式的過程中,傳給函式的是實參的地址,在函式體內部使用的也是實參的地址,即使用的就是實參本身。所以在函式體內部可以改變實參的值(值傳遞與址傳遞)。