參數傳遞

參數傳遞

函數的參數分爲形參和實參兩種.形參(即形式參數)出現在函數定義中;實參(即實際參數)出現在主調函數中.函數調用時,主調函數把實參的值傳送給被調函數的形參,從而實現主調函數向被調函數的數據傳送.

      

⑴關於形參與實參的說明

①在定義函數中指定的形參,在未出現函數調用時,它們並不佔內存中的存儲單元.形參變量只有在被調用時才分配內存單元,在調用結束後,立即釋放所分配的內存單元因此,形參只在函數內部纔有效.

②實參可以是常量,變量,表達式,函數等,無論實參是何種類型的量,在進行函數調用時,它們都必須具有確定的值(或地址),以便把這些值傳送給形參.

③實參和形參在數量上,類型上,順序上應嚴格一致,否則會發生"類型不匹配"的錯誤.對實參與形參數據類型不同時,應在帶入實參時做相應的數據類型轉換.而對於字符型與整型在有效的數據範圍內可以互相通用.

④C語言規定,實參變量對形參變量的數據傳遞是"值傳遞",即單向傳遞.只能把實參的值傳送給形參,而不能把形參的值反向地傳送給實參.在內存中,實參單元與形參單元是不同的單元.

⑤在調用函數時,給形參分配存儲單元,並將實參對應的值傳遞給形參.調用結束後形參單元被釋放,實參單元仍保留並維持原值.因此,在執行一個被調用函數時,形參的值如果發生改變,並不會影響主調函數的實參的值.

⑵參數傳遞的兩種方式

①數值傳遞方式

特點:實參通過複製的方式傳遞給形參(實參和形參佔用不同的內存空間).

數據複製方式就是把數據本身作爲實參傳遞給形參,在傳遞時,有一個複製的動作,即將實際參數的值複製給形式參數.數值傳遞方式,如果形參的值發生改變,並不會影響實參的值.

②地址傳遞方式

特點:參數傳遞不是數據本身,而是數據的地址(實參和形參使用同一地址空間).

實參a

形參x

實參內存空間

形參內存空間

 

 

參數傳遞的例子:

地址傳送方式是將數據的存儲地址作爲參數傳遞給形式參數,即要求形式參數的數據類型應是指針,對於實際參數來說其數據類型也要求是一個指針.指針類型存儲的不是一個具體的數據,而是一個數據的地址.

在參數的傳遞中,實際上是把實參的地址傳送給形參,兩個參數共有同一個地址,指向同一個內存單元.所以在被調函數中可以直接對這個內存空間進行操作.當退出被調函數時,雖然形式參數立即隨之消失,但其所作的各種操作已經影響了主調函數實際參數所指向存儲空間的內容.

注意:由於按地址傳遞方式可以改變實參的值,因此,可以通過按地址傳遞方式來返回參數值.但同時要注意,必須確信實參值是要改變的,否則不能使用這種方式.

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章