999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

淺談C++語(yǔ)言的函數(shù)參數(shù)傳遞

2019-07-15 10:58:30趙慧慧杜敏王麗陶駿
科教導(dǎo)刊 2019年16期

趙慧慧 杜敏 王麗 陶駿

摘 要 介紹了C++編程函數(shù)的定義和意義,說明了參數(shù)所對(duì)應(yīng)變量存儲(chǔ)情況,以數(shù)據(jù)交換的函數(shù)為例,分析了形參為值、指針和引用的參數(shù)傳遞和程序執(zhí)行過程,得出了通過傳遞指針或者傳遞引用的方式可以把形參的改變傳遞給實(shí)際參數(shù)。

關(guān)鍵詞 函數(shù) 引用 指針 參數(shù)

中圖分類號(hào):TP312 文獻(xiàn)標(biāo)識(shí)碼:A DOI:10.16400/j.cnki.kjdks.2019.06.021

Discussion on Functional Parameter Transfer in C++ Language

ZHAO Huihui[1], DU Min[1], WANG Li[2], TAO Jun[1]

([1] Department of Computer and Software, Anhui Institute of Information Technology, Wuhu, Anhui 241000;

[2] Anhui Electric Power Communications Branch of State Grid, Hefei, Anhui 230061)

Abstract The definition and significance of C++ programming function are introduced, and the storage of variables corresponding to parameters is explained. Taking the function of data exchange as an example, the process of parameter transfer and program execution with parameters as values, pointers and references is analyzed. It is concluded that the change of parameters can be transmitted to actual parameters by transferring pointers or references.

Keywords function; references; pointers; parameters

0 概論

C++語(yǔ)言是一門重要的面向?qū)ο蟮慕虒W(xué)語(yǔ)言,其具有封裝、繼承和多態(tài)的面向語(yǔ)言的特征,在計(jì)算機(jī)科學(xué)的教學(xué)過程中,C++語(yǔ)言是一門重要的專業(yè)基礎(chǔ)課,對(duì)于學(xué)生掌握計(jì)算機(jī)編程技術(shù)有著重要的意義。

函數(shù)是C++編程語(yǔ)言一種重要機(jī)制,其使程序變得更簡(jiǎn)短和清晰,而且讓程序易于理解,這就有利于程序維護(hù),又可以提高程序員的程序開發(fā)的效率,提高了代碼的重用性。

函數(shù)分成自定義函數(shù)和主函數(shù)main函數(shù),其中main函數(shù)是程序運(yùn)行的入口,函數(shù)由函數(shù)聲明和函數(shù)體構(gòu)成,函數(shù)聲明又包括函數(shù)返回值類型、函數(shù)名稱和函數(shù)的形式參數(shù),形式參數(shù)負(fù)責(zé)接受函數(shù)調(diào)用方的實(shí)際參數(shù)的傳遞,函數(shù)接受到實(shí)際參數(shù)后在函數(shù)體中進(jìn)行執(zhí)行得到返回值,最后把返回值送給調(diào)用方,有些自定義函數(shù)是沒有返回值的,這類函數(shù)的返回值類型為void。

在C++實(shí)際的教學(xué)中,因?yàn)閰?shù)類型有多種多樣,比如值、指針和引用,同學(xué)們對(duì)函數(shù)傳遞往往感到困惑,本文在介紹變量存儲(chǔ)的前提下,詳細(xì)分析了實(shí)際參數(shù)和形式參數(shù)的傳遞過程以及如何通過函數(shù)運(yùn)行來達(dá)到改變實(shí)際參數(shù)所對(duì)應(yīng)的值。

1 變量的存儲(chǔ)

一個(gè)C++的程序占用的存儲(chǔ)主要為:棧,其在程序運(yùn)行時(shí)由編譯器自動(dòng)分配,存放函數(shù)的參數(shù)值和局部變量的值; 堆,其是在內(nèi)存中開辟另一塊存儲(chǔ)區(qū)域。一般由程序員分配釋放, 若程序員不釋放,程序結(jié)束時(shí)由操作系統(tǒng)回收;全局區(qū),其在編譯器編譯時(shí)得到分配內(nèi)存。全局變量和靜態(tài)變量的存儲(chǔ)是放在一塊的,初始化的全局變量和靜態(tài)變量在一塊區(qū)域,程序結(jié)束后操作系統(tǒng)會(huì)自動(dòng)釋放其存儲(chǔ)空間。文字常量區(qū),其負(fù)責(zé)存儲(chǔ)常量字符串,程序結(jié)束后由操作系統(tǒng)釋放。程序代碼區(qū),其負(fù)責(zé)存放函數(shù)體的二進(jìn)制代碼,程序結(jié)束后由操作系統(tǒng)釋放。

函數(shù)的實(shí)際參數(shù)一般都是main()函數(shù)中局部變量,經(jīng)過參數(shù)傳遞后變成所調(diào)用函數(shù)中的局部變量,這兩種變量一般都是存儲(chǔ)在棧中,棧會(huì)給它們分配存儲(chǔ)地址,存儲(chǔ)地址本質(zhì)上是一個(gè)32位的沒有符號(hào)的2進(jìn)制整數(shù),其表現(xiàn)形式為一個(gè)8位的16進(jìn)制數(shù),如一個(gè)整型變量q的值為10,程序執(zhí)行時(shí)為其分配的地址是0x2222eeee,具體如圖1。

從圖中可以看到q的存儲(chǔ)地址0x2222eeee,需要注意的是存儲(chǔ)地址一般是指存儲(chǔ)開始地址,q是4個(gè)字節(jié)的整形變量,其所占用的存儲(chǔ)空間為0x2222eeee到0x2222eef2共有4個(gè)字節(jié)。函數(shù)接受實(shí)際參數(shù)后生成的變量只在函數(shù)體內(nèi)有效,當(dāng)函數(shù)執(zhí)行完畢后,此變量會(huì)被操作系統(tǒng)銷毀而不復(fù)存在。

1.1 指針

指針是指地址,是一個(gè)沒有符號(hào)的32位數(shù),其負(fù)責(zé)存儲(chǔ)具體的數(shù)值和結(jié)構(gòu),其可以存儲(chǔ)整型值、字符、字符串,也可以存儲(chǔ)結(jié)構(gòu)體、對(duì)象和函數(shù)等。而指針變量是一個(gè)變量,其存儲(chǔ)的是一個(gè)指針,而不是具體的數(shù)值和結(jié)構(gòu)。

有以下的代碼:int p=4,*q; q=&p;這里p是一個(gè)整形變量,&p是存儲(chǔ)p的指針,&p里存的值為4。q是一個(gè)指針變量,q的值為&p,而&q是存儲(chǔ)q的地址,具體如圖2所示。

&p是一個(gè)32位沒有符號(hào)的整數(shù)。0x13456789,是一個(gè)指針,其里面存儲(chǔ)的數(shù)據(jù)為p;q是一個(gè)指針變量,其值等于0x13456789,而q存儲(chǔ)在指針&q(0x236567ae)中。

1.2 引用

引用指一個(gè)變量的別名,操作系統(tǒng)并不會(huì)給引用開辟新的存儲(chǔ)空間,其和其引用的變量使用相同的存儲(chǔ)地址,由于使用相同的存儲(chǔ)的地址,引用的值改變后,相關(guān)變量的值也會(huì)發(fā)生改變,同理當(dāng)相關(guān)變量的值改變后,引用的值也會(huì)改變,如以下代碼:

int p=4; int&q=p; p=5;q=10;其相關(guān)的具體的地址分配如圖3。

p是一個(gè)變量,q是關(guān)于p的引用,從圖中可以看到p和q其實(shí)是存儲(chǔ)在同一地址0x123456789當(dāng)中的,無論是p或者是q發(fā)生了變化,p和q都用是相同的值,比如p=5后,盡管未對(duì)q賦值,q也會(huì)變成5。q=10后,未對(duì)p進(jìn)行賦值,p也會(huì)變成10。

2 函數(shù)的傳遞

函數(shù)的傳遞一般是指main( )函數(shù)把實(shí)際參數(shù)傳遞給自定義函數(shù)f( )中的形式參數(shù),函數(shù)的參數(shù)類型可以是具體的值,也可以是指針和引用,參數(shù)的類型不同,傳遞后的運(yùn)算結(jié)果也可能不同,下面以兩個(gè)數(shù)交換的函數(shù)來分析參數(shù)傳遞以及程序執(zhí)行的結(jié)果。

2.1 形式參數(shù)為值

具體代碼如下:

void swap(int x, int y)

{ int temp;

temp=x; x=y;y=temp;}

void main( )

{ int a=4,b=3;

swap(a,b);

cout<

程序執(zhí)行時(shí),變量存儲(chǔ)的情況如圖4所示。

swap函數(shù)執(zhí)行前,操作系統(tǒng)為實(shí)參a、b分配的存儲(chǔ)地址分別為0x1111eeee和0x2222eeee;swap函數(shù)執(zhí)行時(shí),實(shí)參a,b繼續(xù)存在,操作系統(tǒng)為形參x、y分配的存儲(chǔ)地址分別為0x3333eeee和0x4444eeee;swap函數(shù)執(zhí)行時(shí),main函數(shù)會(huì)把實(shí)參a和b的值傳遞給形參x和y,swap函數(shù)執(zhí)行后,形參x、y的信息(包括地址和值)被銷毀,而實(shí)際參數(shù)a,b的值保持不變,因?yàn)榇藭r(shí)形參無法把交換的值回傳給實(shí)參,參數(shù)值傳遞是單向的,形參x、y只是在swap函數(shù)體內(nèi)交換成功,但無法對(duì)main函數(shù)中的實(shí)際參數(shù)起作用。

2.2 形式參數(shù)為值

2.2.1 傳指針交換指針對(duì)應(yīng)的數(shù)值

具體代碼如下:

void swap(int *x, int *y)

{ int temp;

temp=*x; *x=*y;*y=temp;}

void main( )

{ int a=4,b=3;

swap(&a,&b);

cout<

程序執(zhí)行時(shí),參數(shù)存儲(chǔ)的情況如圖5所示。

swap函數(shù)執(zhí)行前,操作系統(tǒng)為實(shí)參a、b分配的存儲(chǔ)地址分別為0x1111eeee和0x2222eeee;swap函數(shù)執(zhí)行時(shí),實(shí)參a,b繼續(xù)存在,操作系統(tǒng)為變量x、y分配的存儲(chǔ)地址分別為0x3333eeee和0x4444eeee,但此時(shí)x和y是指針變量,其存儲(chǔ)的不是a和b的值,而是a和b對(duì)應(yīng)的存儲(chǔ)地址,此時(shí)函數(shù)交換的不是x和y,而是x和y對(duì)應(yīng)的整數(shù)值,交換前后a和b的存儲(chǔ)地址與x和y的值是相同的,但是交換后這兩個(gè)存儲(chǔ)地址中的值卻進(jìn)行了交換,swap函數(shù)執(zhí)行后,x和y被銷毀, a=3、b=4。

2.2.2 傳指針交換指針

具體代碼如下:

void swap(int *x, int *y)

{ int *temp;

temp=x; x=y;y=temp;}

void main( )

{ int a=4,b=3;

swap(&a,&b);

cout<

程序執(zhí)行時(shí),參數(shù)存儲(chǔ)的情況如圖6所示。

swap函數(shù)執(zhí)行前,操作系統(tǒng)為實(shí)參a、b分配的存儲(chǔ)地址分別為0x1111eeee和0x2222eeee;swap函數(shù)執(zhí)行時(shí),實(shí)參a,b繼續(xù)存在,操作系統(tǒng)為形參x、y分配的存儲(chǔ)地址分別為0x3333eeee和0x4444eeee,此時(shí)x和y也是指針變量,其存儲(chǔ)的不是a和b的值,而是a和b對(duì)應(yīng)的存儲(chǔ)地址,此時(shí)函數(shù)交換x和y,交換后x和y的值發(fā)生了交換,但是交換后這兩個(gè)存儲(chǔ)地址中的值卻沒有交換,swap函數(shù)執(zhí)行后,x和y被銷毀, a=4、b=3,沒有發(fā)生變化。

2.3 形式參數(shù)為引用

具體代碼如下:

void swap(int&x, int&y)

{ int temp;

temp=x; x=y;y=temp;}

void main( )

{ int a=4,b=3;

swap(a,b);

cout<

程序執(zhí)行時(shí),參數(shù)存儲(chǔ)的情況如圖7所示。

swap函數(shù)執(zhí)行前,操作系統(tǒng)為實(shí)參a、b分配的存儲(chǔ)地址分別為0x1111eeee和0x2222eeee;swap函數(shù)執(zhí)行時(shí),實(shí)參a、b繼續(xù)存在,因?yàn)樾问絽?shù)為引用,操作系統(tǒng)不為形參x、y分配的新的存儲(chǔ)地址,此時(shí)x和y的存儲(chǔ)地址與a和b的存儲(chǔ)地址是相同的,此時(shí)函數(shù)交換x和y,交換后x和y的值發(fā)生了交換,a和b的值也發(fā)生了變化,swap函數(shù)執(zhí)行后,x和y被銷毀, a=3、b=4,a和b的值發(fā)生了變化。

通過上述四種情況可以看出,形參和實(shí)參的類型是具體的數(shù)值時(shí),此時(shí)形參的改變是無法改變實(shí)參的;形參和實(shí)參的類型是指針時(shí),如果在自定義函數(shù)f()中修改指針參數(shù)中存儲(chǔ)的數(shù)據(jù),是能夠?qū)崿F(xiàn)修改實(shí)參指針中存儲(chǔ)的數(shù)據(jù),如果只是修改自定義函數(shù)f()中形參的,是無法實(shí)現(xiàn)修改實(shí)參指針中存儲(chǔ)的數(shù)據(jù);形參和實(shí)參的類型是引用時(shí),是能夠通過修改形參值來達(dá)到修改實(shí)際參數(shù)的值,而且這種方式最為簡(jiǎn)潔使用。

3 總結(jié)

本文介紹了C++函數(shù)的定義和意義,簡(jiǎn)要說明了函數(shù)的四個(gè)組成部分:返回類型、函數(shù)名、形式參數(shù)和函數(shù)體,說明了函數(shù)形式參數(shù)在接受過實(shí)際參數(shù)后所生成的變量的存儲(chǔ)情況,此時(shí)變量一般存儲(chǔ)在棧中,當(dāng)函數(shù)執(zhí)行完畢后,這些變量也會(huì)被操作系統(tǒng)銷毀掉。形式參數(shù)的類型會(huì)影響程序運(yùn)行結(jié)果,本文以一個(gè)兩個(gè)數(shù)的交換函數(shù)為例,詳細(xì)分析了形式參數(shù)為值、指針和引用時(shí)的交換過程和執(zhí)行結(jié)果,很好的消除了同學(xué)們?cè)趯W(xué)習(xí)參數(shù)傳遞過程中的疑惑。

安徽省教育廳質(zhì)量工程項(xiàng)目“計(jì)算機(jī)網(wǎng)絡(luò)基礎(chǔ)教學(xué)團(tuán)隊(duì)”(基金號(hào):2017jxtd145),陶駿。安徽信息工程學(xué)院核心專業(yè)課程建設(shè)項(xiàng)目”數(shù)據(jù)結(jié)構(gòu)與算法”(基金號(hào):2018xjkcjs02),陶駿

參考文獻(xiàn)

[1] 鄧俊輝.數(shù)據(jù)結(jié)構(gòu)(C++語(yǔ)言版)[M].北京:清華大學(xué)出版社,2013:45-60.

[2] 趙立波.軟件工程專業(yè)以軟件導(dǎo)論課程為中心的課程群建設(shè)探索[J].高教學(xué)刊,2019(04):58-60.

[3] 李海軍.計(jì)算機(jī)程序設(shè)計(jì)類課程的實(shí)驗(yàn)教學(xué)研究[J].計(jì)算機(jī)時(shí)代,2019(02):89-91.

[4] 王會(huì)婷,陳應(yīng)祖.《C/C++語(yǔ)言程序設(shè)計(jì)》課程考試系統(tǒng)的開發(fā)與應(yīng)用[J].軟件工程,2019.22(02):51-53.

[5] 丁嵐,范開勇,馮振穎.面向?qū)ο蟪绦蛟O(shè)計(jì)方法研究[J].數(shù)字通信世界,2019(01):73-74.

[6] 趙春澤,錢鷹,張力生.基于計(jì)算思維的軟件工程專業(yè)程序設(shè)計(jì)基礎(chǔ)課程的教學(xué)改革探究[J].教育現(xiàn)代化,2018.5(53):67-69.

[7] 于寅驊.C++程序設(shè)計(jì)課程教學(xué)的思考[J].西部素質(zhì)教育,2018.4(22):113-114.

[8] 潘磊,王琦,王丹華.數(shù)據(jù)結(jié)構(gòu)課程教學(xué)改革研究[J].科技創(chuàng)新導(dǎo)報(bào),2018.15(24):228-231.

[9] 譚火彬,林廣艷.培養(yǎng)軟件工程思想的面向?qū)ο蟪绦蛟O(shè)計(jì)課程改革與實(shí)踐[J].計(jì)算機(jī)教育,2018(08):53-58.

[10] 張程乾.軟件工程技術(shù)發(fā)展的趨勢(shì)研究[J].數(shù)字技術(shù)與應(yīng)用,2018.36(08):195,197.

[11] 宋琦,王冠宇,張力生.軟件工程型人才培養(yǎng)體制下的《C++程序設(shè)計(jì)》課程“321”新模式[J].現(xiàn)代計(jì)算機(jī)(專業(yè)版),2018(01):51-54.

主站蜘蛛池模板: 亚洲国产精品一区二区高清无码久久| 手机永久AV在线播放| 欧美国产在线看| 国内精品一区二区在线观看| 91外围女在线观看| 67194在线午夜亚洲| 色九九视频| 国产无码网站在线观看| av在线手机播放| 国产又爽又黄无遮挡免费观看| 久久久久免费看成人影片| 爆乳熟妇一区二区三区| 国产高清色视频免费看的网址| 亚洲国产清纯| 东京热高清无码精品| 国产成人亚洲精品无码电影| 久久公开视频| 国产农村1级毛片| 成人福利在线免费观看| 国产特一级毛片| 99在线观看精品视频| 国产一区二区免费播放| 日韩亚洲综合在线| 欧美在线精品怡红院| 国产在线98福利播放视频免费| 日韩A∨精品日韩精品无码| 国产成年女人特黄特色大片免费| 国产麻豆精品久久一二三| 亚洲精品不卡午夜精品| 一区二区三区在线不卡免费| 97成人在线视频| 熟妇人妻无乱码中文字幕真矢织江| 国产午夜精品一区二区三| 女人18毛片一级毛片在线 | 国产裸舞福利在线视频合集| 成人在线天堂| 亚洲国产亚洲综合在线尤物| 久久久91人妻无码精品蜜桃HD| 国产福利大秀91| 亚洲欧美一区二区三区麻豆| 国产在线自在拍91精品黑人| 久久久久国产精品嫩草影院| 亚洲精品大秀视频| 亚洲精品国产综合99| 全裸无码专区| 国产一级视频在线观看网站| 欧美成人午夜视频| 全免费a级毛片免费看不卡| 亚洲成人精品| 午夜视频免费试看| 99这里精品| 亚洲最新网址| 亚洲午夜福利在线| 天天色综合4| 在线播放精品一区二区啪视频| 色综合五月婷婷| 日韩国产黄色网站| 国产噜噜在线视频观看| 欧美在线伊人| 国产91丝袜在线播放动漫| 免费激情网址| 色悠久久久| 亚洲日韩久久综合中文字幕| 欧美国产视频| 高清久久精品亚洲日韩Av| 亚洲综合一区国产精品| 亚洲欧美自拍一区| 日韩天堂网| 五月婷婷精品| 18禁影院亚洲专区| 激情综合图区| 日本精品影院| 福利在线一区| 精品三级网站| 午夜一级做a爰片久久毛片| 午夜欧美在线| 国产Av无码精品色午夜| 亚洲性影院| 又爽又大又黄a级毛片在线视频 | 精品久久蜜桃| 国产一级小视频| 成人日韩欧美|