你說的是函數(shù)的返回者吧
創(chuàng)新互聯(lián)公司長期為1000+客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺(tái),與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為康馬企業(yè)提供專業(yè)的網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作,康馬網(wǎng)站改版等技術(shù)服務(wù)。擁有10年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。
函數(shù)的值是指函數(shù)被調(diào)用之后,執(zhí)行函數(shù)體中的程序段所取得的并返回給主調(diào)函數(shù)的值。如調(diào)用正弦函數(shù)取得正弦值。對(duì)函數(shù)的值(或稱函數(shù)返回值)有以下一些說明:
1) 函數(shù)的值只能通過return語句返回主調(diào)函數(shù)。
return 語句的一般形式為:
return 表達(dá)式;
或者為:
return (表達(dá)式);
該語句的功能是計(jì)算表達(dá)式的值,并返回給主調(diào)函數(shù)。在函數(shù)中允許有多個(gè)return語句,但每次調(diào)用只能有一個(gè)return 語句被執(zhí)行,因此只能返回一個(gè)函數(shù)值。
2) 函數(shù)值的類型和函數(shù)定義中函數(shù)的類型應(yīng)保持一致。如果兩者不一致,則以函數(shù)類型為準(zhǔn),自動(dòng)進(jìn)行類型轉(zhuǎn)換。
3) 如函數(shù)值為整型,在函數(shù)定義時(shí)可以省去類型說明。
4) 不返回函數(shù)值的函數(shù),可以明確定義為“空類型”,類型說明符為“void”。如例8.2中函數(shù)s并不向主函數(shù)返函數(shù)值,因此可定義為:
void s(int n)
{ ……
}
一旦函數(shù)被定義為空類型后,就不能在主調(diào)函數(shù)中使用被調(diào)函數(shù)的函數(shù)值了。例如,在定義s為空類型后,在主函數(shù)中寫下述語句
sum=s(n);
就是錯(cuò)誤的。
為了使程序有良好的可讀性并減少出錯(cuò), 凡不要求返回值的函數(shù)都應(yīng)定義為空類型。
c語言規(guī)定,函數(shù)返回值的類型是由函數(shù)首部定義的類型決定。函數(shù)返回值應(yīng)與首部定義的類型一致,如若不一致,則自動(dòng)將返回值強(qiáng)制轉(zhuǎn)換為函數(shù)首部定義的類型。沒有定義類型時(shí)默認(rèn)為int型。
也就是說你的函數(shù)是什么類型,返回值就是什么類型。
比如:
函數(shù)定義 int fun(int a,char b)
返回值就是整型
函數(shù)定義 int *fun(int a)
返回值就是基類型為整型的指針
函數(shù)定義 void fun(int a)
無返回值
擴(kuò)展資料
函數(shù)可以有返回值,只要 return 就可以給出一個(gè),不過常常不用它,有兩個(gè)原因:
1、C/C++里返回值是復(fù)制出去的,而對(duì)于大的對(duì)象,復(fù)制的代價(jià)很高;
2、有些對(duì)象是不能復(fù)制的,至少編譯器不知道怎么復(fù)制,比如數(shù)組。
于是有了下面這樣的函數(shù):
bool GetObj(ObjType obj);
bool Encode(const char* src, char* dest);
用一個(gè)參數(shù)來代替返回值,而返回值只是指示函數(shù)執(zhí)行是否成功。
返回一個(gè)大對(duì)象是困難的,但這個(gè)困難存在于 C 程序中,而不是 C++ 程序中。 C 函數(shù)里較少通過返回一個(gè)指針來返回對(duì)象,因?yàn)椋?/p>
1、如果指針指向棧變量,毫無疑問,要么不用這個(gè)返回值,要么是一個(gè)錯(cuò)誤;
2、如果指針指向堆變量,需要用這個(gè)函數(shù)的程序員會(huì)好好的看文檔且足夠細(xì)心會(huì)調(diào)用 free,要么就是內(nèi)存泄漏;
3、如果指針指向 static 變量,那么用這個(gè)函數(shù)的程序員牢牢記住“下次調(diào)用這個(gè)函數(shù)以后,上次的返回值也會(huì)跟著變”。
在C++里直接返回裸指針的話,情況并不會(huì)有什么起色,不過 C++ 有智能指針的,通常它們指向堆變量,占用的空間和裸指針一樣大。考慮前面第一個(gè)函數(shù),寫成:
std::auto_ptrObjType GetObj();
返回值如果不要,作為臨時(shí)變量,會(huì)立即被析構(gòu),返回的對(duì)象被釋放;如果需要,就得賦值給另一個(gè)智能指針??傊挥贸绦騿T記得,編譯器會(huì)保證這個(gè)對(duì)象的釋放。
考慮第二個(gè)函數(shù),稍微有一點(diǎn)麻煩,因?yàn)?auto_ptr 是不能用來持有數(shù)組的,不過,在C++的世界里,std::string 幾乎總是比 char* 好用:
std::auto_ptrstd::string Encode(const char* src);
最后考慮最麻煩的情況:
bool AssembleObjList(ObjType objList[], size_t length);
函數(shù)的返回值通過return語句來執(zhí)行,即return后的變量或表達(dá)式的值,就為該函數(shù)的返回值(你可以根據(jù)需要自定義返回什么值),而返回值的類型是指該值你想要得到的類型,比如return
a;(a的類型,你在函數(shù)體里定義的是int
a;但根據(jù)需要,你要的是一個(gè)float型的返回值),于是,這樣定義一個(gè)函數(shù):
float
函數(shù)名(參數(shù)列表)
{
int
a;
函數(shù)體;
……
return
a;
}
這樣,返回值a就變成了float型。