c語言函式的return誰能仔細給我解釋一下

時間 2021-10-14 22:40:20

1樓:匿名使用者

事實上 無論是return ; 還是return x;

在彙編上都只有一條指令:ret(retn)

只不過對於return x; 會在 執行ret指令之前對eax暫存器賦值:

如果是return 0 ; 可能編譯器會這樣做:

xor eax,eax

ret其他情況類似

然後從c語言角度講

對於返回型別為void的函式

函式體內可以出現return;語句來表示結束本函式的執行

這個時候eax還是有值的,因為 函式返回型別是void,因此在呼叫該函式的地方不可能會去用該函式的返回值,也就意味著該返回值是毫無意義的

樓主想問的 單獨的return;語句,對於這行**,一般只用在返回型別為void的函式體內

若出現在非void返回型別的函式體內,那麼返回值是隱含在暫存器eax中的

然後對於有返回值的函式來說

return後面是肯定需要跟一個值的

這個值是被送入暫存器eax帶出來的~

我說再多 也許還是會有人不信(本人玩逆向的,這一切信不信那是你們的事,我只能把事實告訴你們,我也只能做到這樣了)

下面直接上**上圖:

(微軟任何c/c++編譯器、vc/vs這些、都支援編譯此**,沒有警告,沒有錯誤)

注:主函式不主函式的return都是沒有區別的

但是main函式很特別,特別在它有好多種寫法,標準c真正的主函式返回型別是int

有2個引數,一個是命令列引數個數,一個是命令列引數

windows下面的主函式可以有三個引數,前兩個引數跟標準c一樣,第三個引數是環境變數

這些引數都是由maincrtstartup函式傳進來的,而maincrtstartup再往上你還要研究的話那。。。。那。。。那。。。我只能告訴你這些引數都是要作業系統傳進來的吧~~~

我們程式設計的時候,也許有些菜鳥會把main寫成如下形式:void main()

其實這種寫法在編譯之後都是會被轉化成標準寫法的底樓說的 不帶返回值系統預設返回0這完全是不靠譜的,因為事實當中返回值都是被暫存器eax帶出去的,而對於main是必須要返回值的,菜鳥寫了沒返回值的main在編譯之前就被編譯器替換掉了,哪來的預設返回0的說法?何來預設?系統會把你寫的main換成 標準main形式!

標準main會在底下返回0

主函式return的值只有你在其他程序中建立子程序,子程序的返回狀態被父程序接收的值就是main的返回值,所以,在你寫的程式不需要被其他程序建立的話,main的返回值是無關緊要的

2樓:網海1書生

這是遞迴呼叫,func(9)的執行流程如下:

第一步:執行func(9),p=9-func(7)第二步:執行func(7),p=7-func(5)第三步:

執行func(5),p=5-func(3)第四步:執行func(3),p=3-func(1)第五步:執行func(1),由於引數x小於2,結束遞迴,return 3

返回第四步:p=3-3=0

返回第三步:p=5-0=5

返回第二步:p=7-5=2

返回第一步:p=9-2=7

最後return p

所以最終輸出結果為7

3樓:匿名使用者

遞迴千萬別糾結過程,一旦糾結你就輸了。

遞迴有兩個關鍵要素,做好這兩點就夠了。一個是遞迴規則,可以理解為數列的通項,另一個就是終止條件,可以理解為首項。在寫函式時候注意好遞迴規則和終止條件的關係就可以了。

c語言中return用法?(請熟練者進)

4樓:橘落淮南常成枳

return是返回值,這個返回值是和函式的型別有關的,函式的型別是什麼,他的返回值就是什麼

比方主函式intmain()

{}這裡就必須有一個return,只有void時可以不用返回值。

功能函式

intfun()

return1;

這個時候fun函式的作用就是返回一個int型別的值,可以直接拿來用比方inta=fun();

這裡就相當於inta=1;

另外一個作用return後面的語句不會執行,我們可以用它來結束程式。

5樓:一路的淚

09年,我也是剛才才搜尋到得,return(); 用來返回自定義函式的值!現在明白了?

現在是2023年,我補充一下我的回答。

當程式**現return();時,此時它要表達的意思是沒有返回值。

當程式**現return(a);時,則此函式會有返回值為a。這個a可以定義為任何型別。

6樓:匿名使用者

返回值就是“函式值”

學習學的時候天天都會遇到函式,而函式給一個自變數函式就會有一個函式值對吧

比如說正弦函式sin,sin(x),不同的x值會得到不同的正弦值y=sin(x) 就是將函式值賦值給y,函式運算完畢y就有了一個值c語言函式意思一樣的

int f(int x)

int a=f(5); 那麼a是多少呢 就是2*5=10

7樓:匿名使用者

在返回值是void型的函式可以用return後面不跟東西來返回(可以中途或最後),

它是結束一個函式的執行,在main函式就是結束整個程式,它和exit的區別是,exit不管出現在**都是結束整個程式,用它們在結束程式時,程式對系統而言也是有返回值的,它的返回值就是用return或exit結束程式時它們後面跟的值

8樓:匿名使用者

int f(int a)

int b=f(c);

c的值不同 函式返回給b值也就不同

我認為返回值是函式與外界的介面之一

至於所謂的狀態 應該是由人來規定的 比如當返回值為0我們就知道f()的傳入值c是等於0的

至於是return 值 還是return 表示式都是一個意思 因為表示式最終的值也是由表示式計算的最終結果來儲存的

9樓:只揉小飯勺

return 的作用是結束正在執行的函式,並返回函式值。return後面可以跟一個常量,變數,或是表示式。

函式的定義一般是這樣的,例如:

int a(int i)//第一個int是函式的返回值的型別,也就是return後面跟的值的型別,a是函式的名稱,括號裡的是傳遞給函式的引數,int是引數的型別,i是引數的名字

簡單函式舉例:

int addone(int b)

該函式的作用是取得一個數,將這個數加上1,再將結果返回

呼叫時這樣:

int result= addone(2);//此時result的值為3

函式括號裡的引數也可以為變數或能算出值的表示式

以上就是一個基本的函式,一般的函式都有返回值,也就是return後面跟的值,返回值可以為各種資料型別,如:int,float,double,char,a(陣列),*a(指標),結構或類(c++)

但不是所有函式都有返回值,如果某個函式無返回值,那麼返回值的位置則為“void”關鍵字,此時函式體中無返回值,即無return的值。但是函式中也可出現return,即一個空的return句子,其作用是使函式立即結束,如

void print()//括號中為空表示無傳遞引數

//該函式只執行到return語句處,即螢幕上輸出的為"ab"

10樓:江小右

return是個好東西

第一個作用,也就是他的真實作用

返回值,這個返回值是和函式的型別有關的,函式的型別是什麼,他的返回值就是什麼

比方主函式int main()

{}這裡就必須有一個return,只有void時可以不用返回值。

功能函式

int fun()

這個時候fun函式的作用就是返回一個int 型別的值,可以直接拿來用比方int a=fun();

這裡就相當於int a=1;

另外一個作用return後面的語句不會執行,我們可以用它來結束程式比方找出三個數種最大的一個數

void main

.....

}在這裡if(b>c)

我們就可以直接得出a是最大了,就沒必要執行下面的語句了,return治理就起到了終止語句的作用了

等用得多了還會有些妙用的,你要自己慢慢體會

c語言中return的含義?

11樓:及羽揚俊

在函式返回型別為void時,即不需要返回任何值,要想結束函式就用

return;

它表示函式執行到這一句時終止函式

12樓:匿名使用者

return 表示結束當前函式並返回值,如果沒定義,則返回 null

如 return 1; 表示返回1

return; 表示返回 null

13樓:匿名使用者

這裡我給你一個簡單的c程式的例子。

int main()

因為在主函式的前面定義了一個int型別的數值,這個資料型別正反應了return要返回的資料型別。通過return,可以讓你對你所關心的資料被另外一個函式來呼叫。這要在你充分理解的c語言的模組化的程式設計理念之後才會有更深刻的理解。

當然下面的操作也是正確的。

void main()

14樓:匿名使用者

return返回一個數值的意思就是把return 《表示式》後面表示式的值返回給呼叫他的函式。舉個例子:

int sum(int i,int j)

main()

程式的輸出為:

21這個21從何而來呢main函式呼叫sum(a,b)函式時將a的值賦給i,b的值賦給j,上面說了return i+j;會計算i+j的值也就是結果等於21,並將21帶回給呼叫它的函式,即c=sum(a,b);相當於c=21,這個21 就是由sum(a,b)中的return反回來的。

c語言函式return和void的用處和意義分別是什麼

難得當歌對酒時 以下不包括建構函式 但建構函式中可以寫return 以結束其執行 1,函式的返回值型別只要不是 void 就要返回一個相同型別的值,當函式出現在一個表示式中時,這個值就是函式的值,比如說你的e max a,b 中,max若不返回一個值,那e的值就有問題,這樣寫函式應該會有錯誤或者警告...

c語言中函式裡是不是遇到return語句就不再執行函式

小夏在深圳 c語言沒有嚴格意義上的 陣列型別 可能從c語言 角度來看,似乎有陣列型別的變數,但是如果嘗試將該變數像其他變數一樣使用,得到的實際上是指向陣列第一個元素的指標。在c語言程式開發中,不可以編寫下面這樣的 char f void 8 int main int argc,char ar 不能在...

C語言關於return的內容

1全部你去掉了return z程式也一樣可以正常執行?你最好再檢查一遍,如果真是這樣那就是你的編譯器出問題了,因為你定義了max的返回值為一個int型的變數,沒有return的話在編譯的時候應該會有錯誤提示無法編譯才對。在c語言裡,return返回的是一個變數的副本。如果一個函式不需要返回任何東西,...