return
創(chuàng)新互聯(lián)建站專注于企業(yè)成都營(yíng)銷網(wǎng)站建設(shè)、網(wǎng)站重做改版、曲松網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、H5高端網(wǎng)站建設(shè)、商城網(wǎng)站制作、集團(tuán)公司官網(wǎng)建設(shè)、外貿(mào)網(wǎng)站建設(shè)、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性價(jià)比高,為曲松等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。
表示從被調(diào)函數(shù)返回到主調(diào)函數(shù)繼續(xù)執(zhí)行,返回時(shí)可附帶一個(gè)返回值,由return后面的參數(shù)指定。
return通常是必要的,因?yàn)楹瘮?shù)調(diào)用的時(shí)候計(jì)算結(jié)果通常是通過返回值帶出的。
如果函數(shù)執(zhí)行不需要返回計(jì)算結(jié)果,也經(jīng)常需要返回一個(gè)狀態(tài)碼來表示函數(shù)執(zhí)行的順利與否(-1和0就是最常用的狀態(tài)碼),主調(diào)函數(shù)可以通過返回值判斷被調(diào)函數(shù)的執(zhí)行情況。
return語句后面具體是什么內(nèi)容,這就要具體情況具體分析了:
(1)
在返回類型是char的函數(shù)中,return后應(yīng)該是char類型的值;
(2)
在返回類型是int的函數(shù)中,如果是要停止函數(shù)的調(diào)用,最好應(yīng)該為0;其他的按照你的目的而定,只要是int
類型就行了
(3)
在返回類型是結(jié)構(gòu)類型的函數(shù)中,return后應(yīng)該是結(jié)構(gòu)的一個(gè)實(shí)例對(duì)象。
總之,函數(shù)定義為什么樣的返回類型,該函數(shù)中return后就應(yīng)該是相應(yīng)類型的值。
當(dāng)n==1時(shí)就返回了, 雖然沒有顯式地寫return
if(n==1) 成立時(shí)執(zhí)行printf語句, 執(zhí)行完后遇到move函數(shù)的右 } 就返回了.
...
從匯編的角度來說,函數(shù)
返回值
,其實(shí)就是函數(shù)返回后,cpu中eax的值。在C語言等語方中,在函數(shù)中寫了返回語句,那么函數(shù)在返回時(shí),就會(huì)對(duì)eax作最后賦值。
int
find(int
a,int
b)
{
if(b=0)
return
100;
else
find(--a,--b);/這里為什么不用返回值?/
}
//為什么不用返回值呢,因?yàn)榇顺绦蜻M(jìn)行遞歸后,在最初返回時(shí),eax的值被賦值為100,而之后的回溯過程中,程序并沒有修改eax的值,所以到最后,返回值還是100。
這種寫法是會(huì)出問題的。應(yīng)寫成。
int
find(int
a,int
b)
{
if(b=0)
return
100;
else
return
find(--a,--b);
}
為什么了修改之后就出錯(cuò)呢,如以上所說,這很好理解,因?yàn)槌绦蜃詈笳{(diào)用了printf()。eax中的值是printf()的返回值。若把他當(dāng)成find()的返回值自然是出錯(cuò)了。
int?hehe(int?n)?{
if(n=1)?return?1;
return?n?*?hehe(n-1);
}
我們一點(diǎn)一點(diǎn)來看:
首先 n = 0 傳入,if條件滿足 返回 hehe(0) = 1
在傳入 n = 1, if條件還是滿足 返回 hehe(1) = 1
我們傳入?yún)?shù) n = 2, if 條件不滿足 hehe(2) = 2 * hehe( 2 - 1 )= 2 * 1
在我們傳入 n =3 , if條件不滿足 hehe(3) = 3 * hehe(2) == 3 * 2 * 1
你繼續(xù)這個(gè)步驟 ,對(duì)任何正整數(shù)n
hehe(n) = n * hehe(n-1) = n * (n-1) * ......* 1
明白了嗎?!