C語言中函數(shù)的返回值類型有什么決?
c語言規(guī)定,函數(shù)返回值的類型是由函數(shù)首部定義的類型決定。函數(shù)返回值應(yīng)與首部定義的類型一致,如若不一致,則自動將返回值強制轉(zhuǎn)換為函數(shù)首部定義的類型。沒有定義類型時默認為int型。
也就是說你的函數(shù)是什么類型,返回值就是什么類型。
比如:
函數(shù)定義 int fun(int a,char b)
返回值就是整型
函數(shù)定義 int *fun(int a)
返回值就是基類型為整型的指針
函數(shù)定義 void fun(int a)
無返回值
擴展資料
函數(shù)可以有返回值,只要 return 就可以給出一個,不過常常不用它,有兩個原因:
1、C/C++里返回值是復(fù)制出去的,而對于大的對象,復(fù)制的代價很高;
2、有些對象是不能復(fù)制的,至少編譯器不知道怎么復(fù)制,比如數(shù)組。
于是有了下面這樣的函數(shù):
bool GetObj(ObjType& obj);
bool Enwxxxcode-style(const char* src, char* dest);
用一個參數(shù)來代替返回值,而返回值只是指示函數(shù)執(zhí)行是否成功。
返回一個大對象是困難的,但這個困難存在于 C 程序中,而不是 C++ 程序中。 C 函數(shù)里較少通過返回一個指針來返回對象,因為:
1、如果指針指向棧變量,毫無疑問,要么不用這個返回值,要么是一個錯誤;
2、如果指針指向堆變量,需要用這個函數(shù)的程序員會好好的看文檔且足夠細心會調(diào)用 free,要么就是內(nèi)存泄漏;
3、如果指針指向 static 變量,那么用這個函數(shù)的程序員牢牢記住“下次調(diào)用這個函數(shù)以后,上次的返回值也會跟著變”。
在C++里直接返回裸指針的話,情況并不會有什么起色,不過 C++ 有智能指針的,通常它們指向堆變量,占用的空間和裸指針一樣大。考慮前面第一個函數(shù),寫成:
std::auto_ptr
GetObj();
返回值如果不要,作為臨時變量,會立即被析構(gòu),返回的對象被釋放;如果需要,就得賦值給另一個智能指針。總之不用程序員記得,編譯器會保證這個對象的釋放。
考慮第二個函數(shù),稍微有一點麻煩,因為 auto_ptr 是不能用來持有數(shù)組的,不過,在C++的世界里,std::string 幾乎總是比 char* 好用:
std::auto_ptr<std::string> Enwxxxcode-style(const char* src);
最后考慮最麻煩的情況:
bool AssembleObjList(ObjType objList[], size_t length