?

C++語言中函數參數傳遞方式剖析

2007-08-25 01:30張瑞玲
智能計算機與應用 2007年4期
關鍵詞:拷貝調用變量

譚 慶 張瑞玲

摘要:主要剖析了函數參數傳遞的各種方式,以及它們之間的區別。

關鍵詞:函數參數傳普通值調用傳地址值調用

引用調用

1傳值調用

傳值調用是指在函數調用時將實參的值傳遞給形參,即拷貝一份給形參。形參和實參在內存中有各自獨立的存儲單元,如果形參的值以后被修改了,那么實參的值不會改變。

在傳值調用中,可以分為傳普通值調用和傳地址值調用兩種。傳普通值是指傳遞變量或表達式的值。傳地址值是指傳遞變量的地址值。

1.1傳普通值調用

傳普通值調用時,形參用變量,實參用變量或表達式。在調用中將實參的值拷貝一份給形參。

例1:傳普通值調用

在主函數中,調用swap()函數的兩個實參是a和b,其值分別為3和5。調用時實參a將它的值3傳遞給形參x,實參b將它的值5傳遞給形參y。

在swap()函數中對形參x和y的值進行了交換。當swap()函數執行完成后,x的值變成了5,v的值變成了3。但實參a和b的值沒有改變,仍然是3和5。

可以看到,在調用swap()函數時,由于形參有自己獨立的存儲單元,存儲單元中存放的是對應實參的拷貝副本,因此,當形參的值發生改變時,實參的值不變。

1.2傳地址值調用

傳地址值調用時,形參用指針,實參用變量的地址。在調用中將實參的值,也就是這個地址拷貝一份給形參。

例2:傳地址值調用

執行該程序后,顯示如下信息:請輸入兩個整數a,b:3,5輸出結果如下:x指的是5,y指的是3a=5,b=3

在主函數中,調用pswap()函數前變量a和b的值分別為3和5,但調用pswap()函數的兩個實參是變量a的地址和變量b的地址,而不是a和b的值。pswap()函數的形參x和y是指向int的指針。調用時將a的地址傳遞給形參x,將b的地址傳遞給形參y。

形參x的值是變量a的地址,那么x可以看成是指向a的指針。形參y的值是變量b的地址,那么y可以看成是指向b的指針。執行pswap()函數后將x和y所指的變量的值進行了交換,這樣a的值變成了5,b的值變成了。

這里類型要一致。這種調用不拷貝實參的副本,只是將形參“綁定”在實參上。實參和形參在內存中代表相同的存儲單元,因此,在被調用函數中,形參引用的改變直接影響到實參變量的改變。

例3:引用調用

在主函數中,調用rswap()函數前變量a和b的值分別為3和5。調用rawap()函數的兩個實參是變量a和變量b。rawap()函數的形參是int型引用x和int型引用y。調用時將變量a傳遞給形參x,將變量b傳遞給形參v。也就是用a去初始化引用x,用b去初始化引用y。x是變量a的引用,x和a在內存中有相同的存儲單元;y是變量b的引用,y和b在內存中有相同的存儲單元。

在rswap()函數中對形參x和y的值進行了交換。當mwap()函數執行完成后,x的值變成了5,y的值變成了3。因為x和a在內存中有相同的存儲單元,y和b在內存中有相同的存儲單元,所以實參a和b的值也改變了,變成5和3。

可以看到,在調用rawap()函數時,由于形參x和實參a有相同的存儲單元,形參y和實參b有相同的存儲單元,存儲單元中存放的值在rawap0函數中通過形參x和y進行了交換,那么,實參a和b的值也進行了交換。因此,在引用調用中,當形參的值發生改變時,實參的值也會隨之改變。

以上程序都在VC++6.0版本下完成。

3調用方式總結

傳普通值調用和傳地址值調用的實參、形參屬于單向傳遞數據,即調用時實參的值傳給形參,形參的值被改變后不會再傳回實參。

引用調用的實參、形參屬于雙向傳遞數據,即調用時實參的值傳給形參,形參的值被改變后會再傳回實參。

猜你喜歡
拷貝調用變量
文化拷貝應該如何“拷”
基于Android Broadcast的短信安全監聽系統的設計和實現
經濟法律系統與ERP、財務管控系統的業務應用集成在電力行業中的應用
影子與我
分離變量法:常見的通性通法
利用RFC技術實現SAP系統接口通信
不可忽視變量的離散與連續
輕松把握變量之間的關系
變中抓“不變量”等7則
漫話拷貝
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合