日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

return 函数

發(fā)布時(shí)間:2023/12/8 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 return 函数 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

return是啥

return其英文含義就是返回,用在函數(shù)中,退出當(dāng)前函數(shù)。這個(gè)想必都知道,分兩種情況:

  • 函數(shù)不帶返回值時(shí),如

void?func(void){/*功能代碼*/...return;}

對(duì)于不帶返回值函數(shù)返回,其語法為 return;對(duì)于void函數(shù),通常不顯式加return語句,程序會(huì)自動(dòng)返回到其調(diào)用者現(xiàn)場(chǎng)。

所以上述函數(shù)如下改寫一下,效果是一樣的:

void?func(void){/*功能代碼*/...}
  • 函數(shù)帶返回值,如

int?add(int?a,?int?b){int?result?=?a+b;return?result;}

對(duì)于帶返回值函數(shù)返回,其語法為 return <value>;返回值可以是一些幾種情況:

  • 一個(gè)常數(shù)

  • 一個(gè)變量

  • 計(jì)算式,例如(a + b)* c

  • 調(diào)用另一個(gè)返回值的函數(shù)

注意:返回值的類型須與函數(shù)返回值類型一致,如不一致,編譯器會(huì)自動(dòng)做類型轉(zhuǎn)換,這里容易出現(xiàn)類型轉(zhuǎn)換的錯(cuò)誤

上代碼:

/*Case?1,返回常量*//*返回常量,-1表示參數(shù)非法,0表示成功*/int?swap(int?*a,?int?*b){int?temp;if(a==NULL?||?b==NULL)return?-1;else{temp?=?*a;*a?=?*b;*b?=?temp;return?0;}}/*Case 2:返回一個(gè)變量*/int?add(int?a,?int?b){int?result?=?a+b;return?result;}/* Case 3:返回一個(gè)表達(dá)式,add函數(shù)改寫一下*/int?add(int?a,?int?b){return?(a+b);}/*?Case?4:返回一個(gè)函數(shù)調(diào)用?*//*STM32編程:是時(shí)候深入理解棧文章中提到的遞歸計(jì)算階乘*/float?factorial(uint32_t?n){uint32_t?sp?=?__get_MSP();????/*記錄棧指針的變化情況*/spSatte[spIndex++]?=?sp;if(n==0?||?n==1)return?1;elsereturn?(float)n*factorial(n-1);}

return 咋工作的?

首先需要了解函數(shù)調(diào)用是如何工作的。當(dāng)調(diào)用一個(gè)函數(shù)時(shí),會(huì)發(fā)生兩件事:

  • 當(dāng)前函數(shù)的執(zhí)行暫停。

  • 調(diào)用的函數(shù)執(zhí)行。

  • 這就是所謂的的控制權(quán)轉(zhuǎn)移。當(dāng)調(diào)用一個(gè)函數(shù)時(shí),程序的控制從調(diào)用函數(shù)轉(zhuǎn)移到被調(diào)用函數(shù)。return語句將控制權(quán)返回到前一個(gè)調(diào)用它的函數(shù)。該函數(shù)將從暫停的地方繼續(xù)執(zhí)行。

    在調(diào)用處,如果查看匯編代碼,單片機(jī)或處理器會(huì)將當(dāng)前CPU的PC指針、臨時(shí)變量、相關(guān)寄存器壓棧,調(diào)用函數(shù)返回時(shí),會(huì)將棧的內(nèi)容彈出到相應(yīng)的寄存器或者臨時(shí)變量,以恢復(fù)現(xiàn)場(chǎng)。關(guān)于棧的解釋可以參見號(hào)內(nèi)文章:<<STM32編程:是時(shí)候深入理解棧>>

    void 函數(shù)真不需要加return嗎?

    事實(shí)上不然,這就是本文希望引起注意的一些要點(diǎn),在哪些場(chǎng)景下需要顯式的對(duì)void函數(shù)添加return語句呢?

    • 傳入指針為空指針,這也是很多面試官會(huì)考察的要點(diǎn)之一,這樣處理會(huì)增強(qiáng)程序的健壯性。

    void?swap(int?*a,?int?*b){int?temp;/*不可操作空指針*/if(a==NULL?||?b==NULL)return?;else{temp?=?*a;*a?=?*b;*b?=?temp;}}
    • 傳入?yún)?shù)非法或者越界

    enum?E_DAY{?E_MON=0,?E_TUS,E_WNd,?E_THR,E_FRD,?E_SAT,?E_SUN?};void?set_day(E_DAY?day,E_DAY?*pDay){?/*?這里就需要判別day參數(shù)是否非法越界?*/if(day>E_SUN?||?day<E_MON?||?pDay?==NULL)return;*pDay?=?day;}
    • 檢測(cè)到異常時(shí)需立即退出當(dāng)前程序的執(zhí)行流。

    void?func(void){FILE?*pFile=fopen("./test.csv","wt+");/*這里就檢測(cè)到文件無法打開的異常,則需要馬上退出*/if(pFile==NULL){printf("file?opened?failed");return?;}.....fclose(pFile);}

    總結(jié)一下

    因?yàn)槿菀缀雎?#xff0c;其實(shí)也是初學(xué)者可能不太注意的一些地方,所以在此總結(jié)一下:

    • return的具體做了什么,其內(nèi)在工作原理需要棧的支持

    • 不帶返回值的函數(shù),可不加return語句

    • 帶返回值的函數(shù),注意返回值的類型與函數(shù)返回值類型一致

    • void函數(shù),在一些特定的場(chǎng)合加上return語句,可增加程序的健壯性:

      • 傳入指針為空指針

      • 傳入?yún)?shù)非法或者越界

      • 檢測(cè)到異常時(shí)需立即退出當(dāng)前程序的執(zhí)行流

      • 其實(shí)非void函數(shù),也強(qiáng)烈建議這么處理。

    總結(jié)

    以上是生活随笔為你收集整理的return 函数的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。