国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > C++ > 正文

C++形參與實(shí)參的區(qū)別實(shí)例解析

2020-05-23 14:24:11
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
這篇文章主要介紹了C++形參與實(shí)參的區(qū)別實(shí)例解析,需要的朋友可以參考下
 
 

本文以實(shí)例闡述了C++中形參與實(shí)參的區(qū)別,有助于讀者加深對(duì)于C++形參與實(shí)參的認(rèn)識(shí)。

形參出現(xiàn)在函數(shù)定義中,在整個(gè)函數(shù)體內(nèi)都可以使用, 離開(kāi)該函數(shù)則不能使用。實(shí)參出現(xiàn)在主調(diào)函數(shù)中,進(jìn)入被調(diào)函數(shù)后,實(shí)參變量也不能使用。 形參和實(shí)參的功能是作數(shù)據(jù)傳送。發(fā)生函數(shù)調(diào)用時(shí), 主調(diào)函數(shù)把實(shí)參的值傳送給被調(diào)函數(shù)的形參從而實(shí)現(xiàn)主調(diào)函數(shù)向被調(diào)函數(shù)的數(shù)據(jù)傳送。

1.形參變量只有在被調(diào)用時(shí)才分配內(nèi)存單元,在調(diào)用結(jié)束時(shí), 即刻釋放所分配的內(nèi)存單元。因此,形參只有在函數(shù)內(nèi)部有效。 函數(shù)調(diào)用結(jié)束返回主調(diào)函數(shù)后則不能再使用該形參變量。

2.實(shí)參可以是常量、變量、表達(dá)式、函數(shù)等, 無(wú)論實(shí)參是何種類(lèi)型的量,在進(jìn)行函數(shù)調(diào)用時(shí),它們都必須具有確定的值, 以便把這些值傳送給形參。 因此應(yīng)預(yù)先用賦值,輸入等辦法使實(shí)參獲得確定值。

3.實(shí)參和形參在數(shù)量上,類(lèi)型上,順序上應(yīng)嚴(yán)格一致, 否則會(huì)發(fā)生“類(lèi)型不匹配”的錯(cuò)誤

4.函數(shù)調(diào)用中發(fā)生的數(shù)據(jù)傳送是單向的。 即只能把實(shí)參的值傳送給形參,而不能把形參的值反向地傳送給實(shí)參。 因此在函數(shù)調(diào)用過(guò)程中,形參的值發(fā)生改變,而實(shí)參中的值不會(huì)變化。

參考如下示例:

void Exchg1(int x, int y) { int tmp; tmp=x; x=y; y=tmp; printf("Exchg1:x=%d,y=%d/n",x,y);}void Exchg2(int &x, int &y) { int tmp; tmp=x; x=y; y=tmp; printf("Exchg2:x=%d,y=%d/n",x,y);}void Exchg3(int *x, int *y) { int tmp; tmp=*x; *x=*y; *y=tmp; printf("Exchg3:x=%d,y=%d/n",*x,*y);}void main(){ int a=4,b=6; Exchg1 (a,b) ; printf("a=%d,b=%d/n",a,b); Exchg2 (a,b); printf("a=%d,b=%d/n",a,b); Exchg3(&a,&b) ; printf("a=%d,b=%d/n",a,b);}

這里Exchg1函數(shù)被調(diào)用的時(shí)候,并沒(méi)有成功交換a跟b的數(shù)據(jù)。為何呢。
int a=4,b=6;
Exchg1 (a,b) ;   //這里本質(zhì)上發(fā)生的是:Exchg1 (intx=a,int y=b) ;   x跟y是函數(shù)定義里面的形參,也就是說(shuō)這里只是把實(shí)參a跟b的值賦予了x,y這2個(gè)形參變量。接下來(lái),函數(shù)里發(fā)生的值互換只換掉了x跟y的值,而實(shí)參a跟b沒(méi)有影響。
再看Exchg2 (a,b);   //再看本質(zhì)Exchg2 (int &x=a,int &y=b);   這里x跟y都是a,b的引用,操作x跟y交換就等于a跟b交換,自然,調(diào)用Exchg2 可以成功交換a跟b
Exchg3(&a,&b) ;   //Exchg3(int *x=&a,int *y=&b);   x跟y2個(gè)形參是a跟b的指針,也就是實(shí)參數(shù)據(jù)存放的地址。然后函數(shù)里交換了x跟y指向的數(shù)據(jù),也就是實(shí)參a跟b,所以,交換也是成功的。

代碼運(yùn)行的結(jié)果,exchg1沒(méi)有交換a,b值;exchg2交換了a,b值,到了exchg,a,b的值似乎沒(méi)有交換,仍舊是a為4,b為6,剛開(kāi)始以為代碼有問(wèn)題,后來(lái)設(shè)置了斷點(diǎn)之后,發(fā)現(xiàn)代碼運(yùn)行到exchg3(&a,&b)時(shí),a=6,b=4了,所以代碼運(yùn)行結(jié)果和初始值一樣的話,說(shuō)明已經(jīng)交換了a,b的值,至此說(shuō)明代碼是沒(méi)有任何問(wèn)題的。


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 将乐县| 高要市| 丰城市| 德化县| 同江市| 攀枝花市| 青阳县| 承德县| 靖西县| 鄂尔多斯市| 卓尼县| 寻乌县| 永和县| 肇源县| 永修县| 南平市| 朝阳区| 白城市| 镇远县| 武宣县| 青河县| 新乐市| 鸡西市| 乡宁县| 昌乐县| 陇川县| 永年县| 莱阳市| 巴中市| 神木县| 洪洞县| 韶关市| 临颍县| 周口市| 瑞昌市| 博湖县| 溧阳市| 渝中区| 集贤县| 武宣县| 荆门市|