函數的返回值,C語言函數返回值詳解

2020-07-16 10:04:22
通常我們希望通過函數呼叫使主調函數能得到一個確定的值,這就是函數的返回值。函數的返回值是通過函數中的 return 語句獲得的。return 語句將被調函數中的一個確定的值帶回到主調函數中,供主調函數使用。

函數的返回值型別是在定義函數時指定的。return 語句中表示式的型別應與定義函數時指定的返回值型別一致。如果不一致,則以函數定義時的返回值型別為準,對 return 語句中表示式的型別自動進行轉換,然後再將它返回給主調函數使用。但是建議初學者在程式設計的時候,務必要保持它們兩個型別一致。

在呼叫函數時,如果需要從被調函數返回一個值供主調函數使用,那麼返回值型別必須定義成非 void 型。此時被調函數中必須包含 return 語句,而且 return 後面必須要有返回值,否則就是語法錯誤。

如果函數有返回值,那麼 return 語句後面的括號可以不要,比如“return(z);”等價於“return z;”。若不需要返回值則可以不要 return 語句。

需要強調的是,一個函數中可以有多個 return 語句,但並不是所有的 return 語句都起作用。執行到哪個 return 語句,就是哪個 return 語句起作用,該 return 語句後的其他語句就都不會執行了。

return是如何將值返回給主調函數的

我們知道,被調函數執行結束後才會返回主調函數,但是被調函數執行結束後系統為被調函數中的區域性變數分配的記憶體空間就會被釋放。也就是說,return 返回的那個值在被調函數執行一結束就被釋放掉了,那麼它是怎麼返回給主調函數的呢?

事實上在執行 return 語句時系統是在內部自動建立了一個臨時變數,然後將 return 要返回的那個值賦給這個臨時變數。所以當被調函數執行結束後 return 後面的返回值真的就被釋放掉了,最後是通過這個臨時變數將值返回給主調函數的。而且定義函數時指定的返回值型別實際上指定的就是這個臨時變數的型別。這些都是系統自動完成的,了解即可。

這也是為什麼當 return 語句中表示式的型別和函數返回值型別不一致時,將 return 的型別轉換成函數返回值型別的原因。return 語句實際上就是將其後的值賦給臨時變數,所以它要以臨時變數的型別為準,即函數返回值的型別。