一般return語句用于函數(shù)返回值,當外界調(diào)用該函數(shù)需要知道函數(shù)執(zhí)行情況的時候,就需要用返回值來告訴調(diào)用者。
創(chuàng)新互聯(lián)專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務,包含不限于成都網(wǎng)站設計、網(wǎng)站制作、李滄網(wǎng)絡推廣、成都微信小程序、李滄網(wǎng)絡營銷、李滄企業(yè)策劃、李滄品牌公關、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運營等,從售前售中售后,我們都將竭誠為您服務,您的肯定,是我們最大的嘉獎;創(chuàng)新互聯(lián)為所有大學生創(chuàng)業(yè)者提供李滄建站搭建服務,24小時服務熱線:13518219792,官方網(wǎng)址:www.cdcxhl.com
而當調(diào)用者不需要知道執(zhí)行情況,只需要去執(zhí)行該函數(shù)的時候,那就不需要返回值。
return的作用1:表示返回,這個程序可以結束了,可以不帶參數(shù)。
如果你的成員運行到這里,你就不往后運行了,可以加一個return語句,就不會再執(zhí)行了。
作用2:返回指定類型的值,在定義函數(shù)的時候不是有
int
af();int
這里是返回值。return
后面接的就是這個返回值,
這個函數(shù)執(zhí)行后就可以給別的變量賦值了,他的值就是return
后面的值。
return 表示把程序流程從被調(diào)函數(shù)轉(zhuǎn)向主調(diào)函數(shù)并把表達式的值帶回主調(diào)函數(shù),實現(xiàn)函數(shù)值的返回,返回時可附帶一個返回值,由return后面的參數(shù)指定。
return通常是必要的,因為函數(shù)調(diào)用的時候計算結果通常是通過返回值帶出的。 如果函數(shù)執(zhí)行不需要返回計算結果,也需要返回一個狀態(tài)碼來表示函數(shù)執(zhí)行的順利與否(-1和0就是最常用的狀態(tài)碼),主調(diào)函數(shù)可以通過返回值判斷被調(diào)函數(shù)的執(zhí)行情況。
擴展資料:
C語言return返回值的說明:
1、沒有返回值的函數(shù)為空類型,用void表示。
2、return 語句可以有多個,可以出現(xiàn)在函數(shù)體的任意位置,但是每次調(diào)用函數(shù)只能有一個 return 語句被執(zhí)行,所以只有一個返回值。
3、函數(shù)一旦遇到 return 語句就立即返回,后面的所有語句都不會被執(zhí)行到了。從這個角度看,return 語句還有強制結束函數(shù)執(zhí)行的作用。
4、return語句是提前結束函數(shù)的唯一辦法。
參考資料來源:百度百科-return(C語言語句)
①為什么需要return?
為了回答這個問題,
我打算用 模塊思維 來解釋。
②定義模塊(形參模塊)
定義函數(shù):f(s)(a,b)
滿足公式:s=a+b
函數(shù)名:f(s)
形參: a,b(公式中的 變量 )
函數(shù)返回值:return s
③調(diào)用模塊(實參模塊)
主函數(shù):main()表示用戶自己編寫的部分
調(diào)用函數(shù):f(s)(1,2)
滿足公式:x=f(s)(1,2)
函數(shù)名:f(s)和定義函數(shù)一致,產(chǎn)生調(diào)用
實參 :1,2( 賦值 給公式的值)
求值:printf("%d\n",x),求x的值?
④值的傳遞過程
調(diào)用模塊 中調(diào)用函數(shù)x=f(s)(1,2)
將實參1和2的值賦值給
定義模塊 中的形參a和b
(實參到形參是單向傳遞,不可逆)
定義模塊計算出s=a+b=1+2=3
定義模塊 中的return s
將s的值賦值給
調(diào)用模塊 中的函數(shù)f(s)(1,2)
即x=f(s)(1,2)=s=3
~
return s的作用
就是將定義模塊中的s
賦值 給調(diào)用模塊中的調(diào)用函數(shù)
如果沒有return s
調(diào)用模塊中的調(diào)用函數(shù)將永遠沒有定值
即所求x 無定值
這一點和數(shù)學不一樣,
數(shù)學中
同一函數(shù)名的值是 通用 的,
C語言中
定義函數(shù)和調(diào)用函數(shù)的值是 隔離 的,
盡管函數(shù)名一樣
如果不賦值,調(diào)用函數(shù)永遠無定值。
事實上 無論是return ; 還是return X;
在匯編上都只有一條指令:ret(retn)
只不過對于return X; 會在 執(zhí)行ret指令之前對eax寄存器賦值:
如果是return 0 ; 可能編譯器會這樣做:
xor eax,eax
ret
其他情況類似
然后從C語言角度講
對于返回類型為void的函數(shù)
函數(shù)體內(nèi)可以出現(xiàn)return;語句來表示結束本函數(shù)的執(zhí)行
這個時候eax還是有值的,因為 函數(shù)返回類型是void,因此在調(diào)用該函數(shù)的地方不可能會去用該函數(shù)的返回值,也就意味著該返回值是毫無意義的
樓主想問的 單獨的return;語句,對于這行代碼,一般只用在返回類型為void的函數(shù)體內(nèi)
若出現(xiàn)在非void返回類型的函數(shù)體內(nèi),那么返回值是隱含在寄存器eax中的
然后對于有返回值的函數(shù)來說
return后面是肯定需要跟一個值的
這個值是被送入寄存器eax帶出來的~
我說再多 也許還是會有人不信(本人玩逆向的,這一切信不信那是你們的事,我只能把事實告訴你們,我也只能做到這樣了)
下面直接上代碼上圖:
(微軟任何C/C++編譯器、VC/VS這些、都支持編譯此代碼,沒有警告,沒有錯誤)
注:主函數(shù)不主函數(shù)的return都是沒有區(qū)別的
但是main函數(shù)很特別,特別在它有好多種寫法,標準C真正的主函數(shù)返回類型是int
有2個參數(shù),一個是命令行參數(shù)個數(shù),一個是命令行參數(shù)
windows下面的主函數(shù)可以有三個參數(shù),前兩個參數(shù)跟標準C一樣,第三個參數(shù)是環(huán)境變量
這些參數(shù)都是由mainCRTStartup函數(shù)傳進來的,而mainCRTStartup再往上你還要研究的話那。。。。那。。。那。。。我只能告訴你這些參數(shù)都是要操作系統(tǒng)傳進來的吧~~~
我們編程的時候,也許有些菜鳥會把main寫成如下形式:void main()
其實這種寫法在編譯之后都是會被轉(zhuǎn)化成標準寫法的底樓說的 不帶返回值系統(tǒng)默認返回0這完全是不靠譜的,因為事實當中返回值都是被寄存器eax帶出去的,而對于main是必須要返回值的,菜鳥寫了沒返回值的main在編譯之前就被編譯器替換掉了,哪來的默認返回0的說法?何來默認?系統(tǒng)會把你寫的main換成 標準main形式!標準main會在底下返回0
主函數(shù)return的值只有你在其他進程中創(chuàng)建子進程,子進程的返回狀態(tài)被父進程接收的值就是main的返回值,所以,在你寫的程序不需要被其他進程創(chuàng)建的話,main的返回值是無關緊要的
這條語句一般情況下加在主函數(shù)的最后,表示程序運行正常,則返回一個整數(shù)值0。其實在windows下一般沒有這個要求,除非是一個程序調(diào)用另外一個程序,或者在unix和linux下系統(tǒng)會要求一個程序返回一個整數(shù)值。
return 可以分兩種情況:
1.有返回值的函數(shù)
int function1(){
return? 1;? ? --必須要return 才能有返回值。
};
2.沒有返回值的函數(shù)
void?function2(){
return;? ? --寫了return會直接跳出函數(shù),不會繼續(xù)執(zhí)行下面的語句。
int a=1+1;
};
擴展資料:
被調(diào)用函數(shù)是void類型表達式最后一句寫return是沒有意義的,如果在表達式的最上面寫return就會直接跳出函數(shù)不會執(zhí)行下面的語句,。
2.被調(diào)用函數(shù)不是void類型,你肯定需要函數(shù)的返回值,比如你寫一個你調(diào)用比大小的函數(shù)你肯定需要知道誰大誰小,記住函數(shù)一旦遇到 return 語句就立即返回,后面的所有語句都不會被執(zhí)行到了。
參考資料
百度百科-return(C語言語句)