c語言函數返回類型
1. c語言規定,函數返回值的類型由什麼決定
c語言規定,函數返回值的類型是由函數首部定義的類型決定。函數返回值應與首部定義的類型一致,如若不一致,則自動將返回值強制轉換為函數首部定義的類型。沒有定義類型時默認為int型。
也就是說你的函數是什麼類型,返回值就是什麼類型。
比如:
函數定義 int fun(int a,char b)
返回值就是整型
函數定義 int *fun(int a)
返回值就是基類型為整型的指針
函數定義 void fun(int a)
無返回值
(1)c語言函數返回類型擴展閱讀
函數可以有返回值,只要 return 就可以給出一個,不過常常不用它,有兩個原因:
1、C/C++里返回值是復制出去的,而對於大的對象,復制的代價很高;
2、有些對象是不能復制的,至少編譯器不知道怎麼復制,比如數組。
於是有了下面這樣的函數:
bool GetObj(ObjType& obj);
bool Encode(const char* src, char* dest);
用一個參數來代替返回值,而返回值只是指示函數執行是否成功。
返回一個大對象是困難的,但這個困難存在於 C 程序中,而不是 C++ 程序中。 C 函數里較少通過返回一個指針來返回對象,因為:
1、如果指針指向棧變數,毫無疑問,要麼不用這個返回值,要麼是一個錯誤;
2、如果指針指向堆變數,需要用這個函數的程序員會好好的看文檔且足夠細心會調用 free,要麼就是內存泄漏;
3、如果指針指向 static 變數,那麼用這個函數的程序員牢牢記住「下次調用這個函數以後,上次的返回值也會跟著變」。
在C++里直接返回裸指針的話,情況並不會有什麼起色,不過 C++ 有智能指針的,通常它們指向堆變數,佔用的空間和裸指針一樣大。考慮前面第一個函數,寫成:
std::auto_ptr<ObjType> GetObj();
返回值如果不要,作為臨時變數,會立即被析構,返回的對象被釋放;如果需要,就得賦值給另一個智能指針。總之不用程序員記得,編譯器會保證這個對象的釋放。
考慮第二個函數,稍微有一點麻煩,因為 auto_ptr 是不能用來持有數組的,不過,在C++的世界裡,std::string 幾乎總是比 char* 好用:
std::auto_ptr<std::string> Encode(const char* src);
最後考慮最麻煩的情況:
bool AssembleObjList(ObjType objList[], size_t length);
2. C語言中函數返回類型和函數返回值
函數的返回值通過return語句來執行,即return後的變數或表達式的值,就為該函數的返回值(你可以根據需要自定義返回什麼值),而返回值的類型是指該值你想要得到的類型,比如return
a;(a的類型,你在函數體里定義的是int
a;但根據需要,你要的是一個float型的返回值),於是,這樣定義一個函數:
float
函數名(參數列表)
{
int
a;
函數體;
……
return
a;
}
這樣,返回值a就變成了float型。
3. C語言中返回值類型是什麼
你說的是函數的返回者吧
函數的值是指函數被調用之後,執行函數體中的程序段所取得的並返回給主調函數的值。如調用正弦函數取得正弦值。對函數的值(或稱函數返回值)有以下一些說明:
1) 函數的值只能通過return語句返回主調函數。
return 語句的一般形式為:
return 表達式;
或者為:
return (表達式);
該語句的功能是計算表達式的值,並返回給主調函數。在函數中允許有多個return語句,但每次調用只能有一個return 語句被執行,因此只能返回一個函數值。
2) 函數值的類型和函數定義中函數的類型應保持一致。如果兩者不一致,則以函數類型為准,自動進行類型轉換。
3) 如函數值為整型,在函數定義時可以省去類型說明。
4) 不返回函數值的函數,可以明確定義為「空類型」,類型說明符為「void」。如例8.2中函數s並不向主函數返函數值,因此可定義為:
void s(int n)
{ ……
}
一旦函數被定義為空類型後,就不能在主調函數中使用被調函數的函數值了。例如,在定義s為空類型後,在主函數中寫下述語句
sum=s(n);
就是錯誤的。
為了使程序有良好的可讀性並減少出錯, 凡不要求返回值的函數都應定義為空類型。
4. c語言中函數返回值的類型由什麼決定
是由你定義函數時所定義的函數的類型決定的。
也就是說函數是什麼類型,返回值就是什麼類型。
比如:
函數定義 int fun(int a,char b)。
返回值就是整型。
函數定義 int *fun(int a)。
返回值就是基類型為整型的指針。
函數定義 void fun(int a)。
無返回值。
簡介
在調用函數時,如果需要從被調函數返回一個值供主調函數使用,那麼返回值類型必須定義成非 void 型。此時被調函數中必須包含 return 語句,而且 return 後面必須要有返回值,否則就是語法錯誤。
一個函數中可以有多個 return 語句,但並不是所有的 return 語句都起作用。執行到哪個 return 語句,就是哪個 return 語句起作用,該 return 語句後的其他語句都不會執行。
5. C語言函數返回類型的默認定義類型是什麼
函數的返回值類型與函數的類型要一致,沒有什麼默認定義類型。
下面進行舉例說明:
//void函數類型沒有返回值
voidfun1(inta)
{
printf("%d",a);
}
//int型函數類型返回值為int型(只要不是void類型,都跟int型函數類似,返回值與函數類型保持一致)
intfun1(inta)
{
inttemp;
temp=2*a;
returntemp;
}
6. c語言函數返回類型默認為什麼類型
函數返回類型是你定義函數時自己決定的,默認為int型
C語言函數格式為:
<類型名>
<函數名>(形參1,形參2……)
類型名就決定了返回類型,如果沒有明確寫出返回類型的話,默認為int類型。
void是空類型,
void必須要明確寫出來才可以,指的是函數不提供返回值,不是默認的。
比如:
函數定義
int
fun(int
a)
返回值就是整型
函數定義
int
*fun(int
a)
返回值就是整型的指針
函數定義
void
fun(int
a)
無返回值