天天看點

形參,實參,傳值,傳位址,傳引用

形式參數和實際參數

函數的參數分為形參和實參兩種。

形參出現在函數定義中,在整個函數體内都可以使用,離開該函數則不能使用。實參出現在主調函數中,進入被調函數後,實參變量也不能使用。形參和實參的功能是作資料傳送。發生函數調用時,主調函數把實參的值傳送給被調函數的形參進而實作主調函數向被調函數的資料傳送。

函數的形參和實參具有以下特點:

1. 形參變量隻有在被調用時才配置設定記憶體單元,在調用結束時,即刻釋放所配置設定的記憶體單元。是以,形參隻有在函數内部有效。函數調用結束傳回主調函數後則不能再使用該形參變量。

2. 實參可以是常量、變量、表達式、函數等,無論實參是何種類型的量,在進行函數調用時,它們都必須具有确定的值,以便把這些值傳送給形參。是以應預先用指派,輸入等辦法使實參獲得确定值。

3. 實參和形參在數量上,類型上,順序上應嚴格一緻,否則會發生類型不比對”的錯誤。

4. 函數調用中發生的資料傳送是單向的。即隻能把實參的值傳送給形參,而不能把形參的值反向地傳送給實參。 是以在函數調用過程中,形參的值發生改變,而實參中的值不會變化。

程式是在記憶體裡運作的。是以無論參數以哪一種方式傳遞,都是在記憶體中“傳來傳去”。在一個程式運作時,程式會專門為參數開辟一個記憶體空間,稱為“棧”。

當程式需要傳遞參數時,将一個個參數“壓入”棧區記憶體的底部,然後,函數再從棧區一個個讀出參數。

如果一個函數需要傳回值,那麼調用者首先需要在棧區留出一個大小正好可以存儲傳回值的記憶體空間,然後再執行參數的入棧操作。

傳值: 是把是實參的值賦給形參,對形參的更改不會影響實參的值 .......... 僅将對象的值傳遞給目标對象,就相當于copy,系統為目标對象重新開辟一個完全相同的記憶體棧空間,然後把對象的值複制到棧中。   傳位址: 是 傳值的一種特殊方式,隻是他傳遞的是位址,不是普通的如int,那麼傳遞位址以後,系統在棧中開辟空間存放位址,實參和形參都指向同一個對象   傳引用 真正的以位址的方式傳遞參數,傳遞以後,形參和實參都是同一個對象,隻是他們名字不同,對形參的修改将影響實參的值 ......... 将對象在記憶體的位址傳給目标對象,相當于使目标對象和原始對象對應同一個記憶體存儲空間,此時,若對目标對象進行修改,記憶體中的資料也會改變     轉自: http://blog.csdn.net/toonny1985/article/details/4739305