版權(quán)歸原作者所有,如有侵權(quán),請(qǐng)聯(lián)系我們

[科普中國(guó)]-返回值

科學(xué)百科
原創(chuàng)
科學(xué)百科為用戶提供權(quán)威科普內(nèi)容,打造知識(shí)科普陣地
收藏

一個(gè)函數(shù)的函數(shù)名即是該函數(shù)的代表,也是一個(gè)變量。由于函數(shù)名變量通常用來(lái)把函數(shù)的處理結(jié)果數(shù)據(jù)返回給調(diào)用函數(shù),即遞歸調(diào)用,所以一般把函數(shù)名變量稱為返回值,函數(shù)的返回值類型是在定義函數(shù)時(shí)指定的。1

概述函數(shù)可以有返回值,也可以沒(méi)有返回值。

(1)沒(méi)有返回值的函數(shù):功能只是完成一個(gè)操作,應(yīng)將返回值類型定義為void,函數(shù)體內(nèi)可沒(méi)有return語(yǔ)句。

(2)有返回值的函數(shù):函數(shù)的最后會(huì)有一個(gè)返回值return,可以用來(lái)獲取該函數(shù)執(zhí)行結(jié)果返回給該函數(shù),讓外部調(diào)用該函數(shù)的。

返回值可指定,如果不指定默認(rèn)返回None。2

函數(shù)的返回值類型是在定義函數(shù)時(shí)指定的。return 語(yǔ)句中表達(dá)式的類型應(yīng)與定義函數(shù)時(shí)指定的返回值類型一致。如果不一致,則以函數(shù)定義時(shí)的返回值類型為準(zhǔn),對(duì) return 語(yǔ)句中表達(dá)式的類型自動(dòng)進(jìn)行轉(zhuǎn)換,然后再將它返回給主調(diào)函數(shù)使用。

在調(diào)用函數(shù)時(shí),如果需要從被調(diào)函數(shù)返回一個(gè)值供主調(diào)函數(shù)使用,那么返回值類型必須定義成非 void 型。此時(shí)被調(diào)函數(shù)中必須包含 return 語(yǔ)句,而且 return 后面必須要有返回值,否則就是語(yǔ)法錯(cuò)誤。

一個(gè)函數(shù)中可以有多個(gè) return 語(yǔ)句,但并不是所有的 return 語(yǔ)句都起作用。執(zhí)行到哪個(gè) return 語(yǔ)句,就是哪個(gè) return 語(yǔ)句起作用,該 return 語(yǔ)句后的其他語(yǔ)句都不會(huì)執(zhí)行。1

return 工作原理被調(diào)函數(shù)運(yùn)行結(jié)束后才會(huì)返回主調(diào)函數(shù),但是被調(diào)函數(shù)運(yùn)行結(jié)束后系統(tǒng)為被調(diào)函數(shù)中的局部變量分配的內(nèi)存空間就會(huì)被釋放。也就是說(shuō),return 返回的那個(gè)值在被調(diào)函數(shù)運(yùn)行一結(jié)束就被釋放掉了,那么它是怎么返回給主調(diào)函數(shù)的呢?
事實(shí)上在執(zhí)行 return 語(yǔ)句時(shí)系統(tǒng)是在內(nèi)部自動(dòng)創(chuàng)建了一個(gè)臨時(shí)變量,然后將 return 要返回的那個(gè)值賦給這個(gè)臨時(shí)變量。所以當(dāng)被調(diào)函數(shù)運(yùn)行結(jié)束后 return 后面的返回值真的就被釋放掉了,最后是通過(guò)這個(gè)臨時(shí)變量將值返回給主調(diào)函數(shù)的。而且定義函數(shù)時(shí)指定的返回值類型實(shí)際上指定的就是這個(gè)臨時(shí)變量的類型。
這也是為什么當(dāng) return 語(yǔ)句中表達(dá)式的類型和函數(shù)返回值類型不一致時(shí),將 return 的類型轉(zhuǎn)換成函數(shù)返回值類型的原因。return 語(yǔ)句實(shí)際上就是將其后的值賦給臨時(shí)變量,所以它要以臨時(shí)變量的類型為準(zhǔn),即函數(shù)返回值的類型。12

C++中的返回值例:

void backward(int n){cout從函數(shù)返回一個(gè)引用,必須在函數(shù)聲明和指派返回值給一個(gè)變量時(shí)都使用引用操作符 & :例子 17-13. 由函數(shù)返回一個(gè)引用

本詞條內(nèi)容貢獻(xiàn)者為:

徐恒山 - 講師 - 西北農(nóng)林科技大學(xué)