狠狠干影院/欧美午夜电影在线观看/高黄文/国产精品一区二区在线观看完整版

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

| 瀏覽次數(shù):

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

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

中圖分類號:TP312 文獻(xiàn)標(biāo)識碼: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++語言是一門重要的面向?qū)ο蟮慕虒W(xué)語言,其具有封裝、繼承和多態(tài)的面向語言的特征,在計算機科學(xué)的教學(xué)過程中,C++語言是一門重要的專業(yè)基礎(chǔ)課,對于學(xué)生掌握計算機編程技術(shù)有著重要的意義。

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

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

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

1 變量的存儲

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

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

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

1.1 指針

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

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

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

1.2 引用

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

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

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

2 函數(shù)的傳遞

函數(shù)的傳遞一般是指main( )函數(shù)把實際參數(shù)傳遞給自定義函數(shù)f( )中的形式參數(shù),函數(shù)的參數(shù)類型可以是具體的值,也可以是指針和引用,參數(shù)的類型不同,傳遞后的運算結(jié)果也可能不同,下面以兩個數(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í)行時,變量存儲的情況如圖4所示。

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

2.2 形式參數(shù)為值

2.2.1 傳指針交換指針對應(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ù)存儲的情況如圖5所示。

swap函數(shù)執(zhí)行前,操作系統(tǒng)為實參a、b分配的存儲地址分別為0x1111eeee和0x2222eeee;swap函數(shù)執(zhí)行時,實參a,b繼續(xù)存在,操作系統(tǒng)為變量x、y分配的存儲地址分別為0x3333eeee和0x4444eeee,但此時x和y是指針變量,其存儲的不是a和b的值,而是a和b對應(yīng)的存儲地址,此時函數(shù)交換的不是x和y,而是x和y對應(yīng)的整數(shù)值,交換前后a和b的存儲地址與x和y的值是相同的,但是交換后這兩個存儲地址中的值卻進(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ù)存儲的情況如圖6所示。

swap函數(shù)執(zhí)行前,操作系統(tǒng)為實參a、b分配的存儲地址分別為0x1111eeee和0x2222eeee;swap函數(shù)執(zhí)行時,實參a,b繼續(xù)存在,操作系統(tǒng)為形參x、y分配的存儲地址分別為0x3333eeee和0x4444eeee,此時x和y也是指針變量,其存儲的不是a和b的值,而是a和b對應(yīng)的存儲地址,此時函數(shù)交換x和y,交換后x和y的值發(fā)生了交換,但是交換后這兩個存儲地址中的值卻沒有交換,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ù)存儲的情況如圖7所示。

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

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

3 總結(jié)

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

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

參考文獻(xiàn)

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

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

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

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

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

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

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

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

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

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

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

推薦訪問: 淺談 函數(shù) 傳遞 參數(shù) 語言

【淺談C++語言的函數(shù)參數(shù)傳遞】相關(guān)推薦

工作總結(jié)最新推薦

NEW
  • XX委高度重視黨校的建設(shè)和發(fā)展,出臺《創(chuàng)建全省一流州市黨校(行政學(xué)院)實施方案》及系列人才培養(yǎng)政策,為黨校人才隊伍建設(shè)提供了有力的政策支撐。州委黨校在省委黨校的悉心指導(dǎo)下、州委的正確領(lǐng)導(dǎo)下,深入貫徹落

  • 為推動“不忘初心、牢記使命”主題教育常態(tài)化,樹牢“清新簡約、務(wù)本責(zé)實、實干興洛”作風(fēng)導(dǎo)向,打造忠誠干凈擔(dān)當(dāng)、敢于善于斗爭的執(zhí)紀(jì)執(zhí)法鐵軍,經(jīng)縣紀(jì)委常委會會議研究,決定在全縣紀(jì)檢監(jiān)察系統(tǒng)開展“轉(zhuǎn)變作風(fēng)工作

  • 為進(jìn)一步發(fā)展壯大農(nóng)村集體經(jīng)濟,增強村級發(fā)展活力,按照中共XXX市委抓黨建促鄉(xiāng)村振興工作領(lǐng)導(dǎo)小組《關(guān)于印發(fā)全面抓黨建促鄉(xiāng)村振興四個工作計劃的通知》要求,工作隊與村“兩委”結(jié)合本村實際,共同研究謀劃xx村

  • 今年來,我區(qū)圍繞“產(chǎn)城融合美麗XX”總體目標(biāo),按照“城在林中,水在城中,山水相連,林水相依”以及“城鄉(xiāng)一體、景城一體、園城一體”的建設(shè)思路,強力推進(jìn)城市基礎(chǔ)設(shè)施建設(shè)、棚戶區(qū)改造、房地產(chǎn)開發(fā)和城市風(fēng)貌塑

  • 同志們:新冠疫情發(fā)生至今已有近三年時間。三年來,在廣大干群的共同努力下,我們堅決打好疫情防控阻擊戰(zhàn),集團公司范圍內(nèi)未發(fā)生一起確診病例,疫情防控工作取得了階段性勝利。當(dāng)前國際疫情仍在擴散蔓延,國內(nèi)疫情多

  • 我是畢業(yè)于XX大學(xué)的定向選調(diào)生,當(dāng)初懷著奉獻(xiàn)家鄉(xiāng)、服務(wù)人民的初心回到XX,在市委的關(guān)心關(guān)愛下,獲得了這個與青年為友的寶貴歷練機會。一年感悟如下。一要對黨忠誠,做政治堅定的擎旗手。習(xí)近平總書記指出,優(yōu)秀

  • 同志們:今天召開這個會議,主要任務(wù)是深入學(xué)習(xí)貫徹習(xí)近平總書記重要指示批示精神,以及李克強總理批示要求,認(rèn)真落實全國安全生產(chǎn)電視電話會議和全省、全市安全生產(chǎn)電視電話會議精神,研究我縣安全生產(chǎn)和安全隱患大

  • 2022年市委政研室機關(guān)黨的建設(shè)工作的總體要求是:堅持以XXX新時代中國特色社會主義思想為指導(dǎo),全面貫徹黨的XX屆X中X會和省、市第十二次黨代會精神,自覺運用黨的百年奮斗歷史經(jīng)驗,弘揚偉大建黨精神,深

  • 同志們:今天,我們在這里召開市直機關(guān)基層黨建示范點工作會議,一方面是對各示范點單位進(jìn)行表彰授牌,另一方面是想通過這種會議交流的方式,給大家提供一個相互學(xué)習(xí)、取長補短的平臺和機會。市直工委歷來把創(chuàng)建基層

  • 新冠疫情暴發(fā)以來,學(xué)校黨委堅決貫徹習(xí)近平總書記關(guān)于疫情防控工作的指示要求和黨中央的決策部署,嚴(yán)格執(zhí)行×××部、×××廳關(guān)于疫情防控的系列要求,認(rèn)真落實駐地防疫部門的工作舉措,繼承發(fā)揚優(yōu)良傳統(tǒng),以最高標(biāo)