傳值和傳引用、傳指針的區別

c語言中所有傳遞給函數的參數都是傳值方式進行的。

傳值,是把實參的值賦值給行參那麼對行參的修改,不會影響實參的值     
傳地址
是傳值的一種特殊方式,只是他傳遞的是地址,不是普通的如int,那麼傳地址以後,實參和行參都指向同一個對象     

傳引用,真正的以地址的方式傳遞參數,傳遞以後,行參和實參都是同一個對象,只是他們名字不同而已, 對行參的修改將影響實參的值。
傳遞引用與傳指針、傳值的區別?

(1)傳遞引用給函數與傳遞指針的效果是一樣的。這時,被調函數的形參就成爲原來主調函數中的實參變量或對象的一個別名來使用,所以在被調函數中對形參變量的操作就是對其相應的目標對象(在主調函數中)的操作。

(2)使用引用傳遞函數的參數,在內存中並沒有產生實參的副本,它是直接對實參操作;而使用一般變量傳遞函數的參數,當發生函數調用時,需要給形參分配存儲單元,形參變量是實參變量的副本;如果傳遞的是對象,還將調用拷貝構造函數。因此,當參數傳遞的數據較大時,用引用比用一般變量傳遞參數的效率和所佔空間都好。

(3)使用指針作爲函數的參數雖然也能達到與使用引用的效果,但是,在被調函數中同樣要給形參分配存儲單元,且需要重複使用"*指針變量名"的形式進行運算,這很容易產生錯誤且程序的閱讀性較差;另一方面,在主調函數的調用點處,必須用變量的地址作爲實參。而引用更容易使用,更清晰。

從本質上來說,傳值和傳指針都是傳值方式,除了傳引用之外。



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