c語言規定,函式返回值的型別由什麼決定

時間 2021-09-05 11:54:52

1樓:我來跟你談談情

c語言規定,函式返回值的型別是由函式首部定義的型別決定。函式返回值應與首部定義的型別一致,如若不一致,則自動將返回值強制轉換為函式首部定義的型別。沒有定義型別時預設為int型。

也就是說你的函式是什麼型別,返回值就是什麼型別。

比如:函式定義 int fun(int a,char b)

返回值就是整型

函式定義 int *fun(int a)

返回值就是基型別為整型的指標

函式定義 void fun(int a)

無返回值

擴充套件資料

函式可以有返回值,只要 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_ptrgetobj();

返回值如果不要,作為臨時變數,會立即被析構,返回的物件被釋放;如果需要,就得賦值給另一個智慧指標。總之不用程式設計師記得,編譯器會保證這個物件的釋放。

考慮第二個函式,稍微有一點麻煩,因為 auto_ptr 是不能用來持有陣列的,不過,在c++的世界裡,std::string 幾乎總是比 char* 好用:

std::auto_ptrencode(const char* src);

最後考慮最麻煩的情況:

bool assembleobjlist(objtype objlist, size_t length);

2樓:匿名使用者

由函式首部定義的型別決定。函式返回值應與首部定義的型別一致,如若不一致,則自動將返回值強制轉換為函式首部定義的型別。沒有定義型別時預設為int型。

3樓:

是由你定義函式時所定義的函式的型別決定的。

也就是說你的函式是什麼型別,返回值就是什麼型別。

比如:函式定義 int fun(int a,char b)返回值就是整型

函式定義 int *fun(int a)返回值就是基型別為整型的指標

函式定義 void fun(int a)無返回值

4樓:匿名使用者

是由你在main函式前面或裡面定義的函式型別所決定的。

比如你在main函式裡定義了float fu(int a)函式,那麼呼叫輸出時就是float型別。

5樓:吉喆嚞

由你希望在函式中得到的資料的型別來決定啊!

6樓:

預設返回值為int可省略

c語言中函式返回值的型別是由() 決定?為什麼選a,而不選b?

7樓:匿名使用者

比如一個求最大值函式定義的時候我這樣定義

int max(float a, float b)假如我給引數 a = 2.6 b = 2.8那麼larger = 2.8

但是函式的返回值型別看的只能是函式型別, 這樣最後返回的只是2而已 , 儘管larger是2.8, 由於函式max的型別是int , 被強制截斷成了2

題目四個選項裡面只有a是看函式型別。所以其他都不對

c語言規定,函式返回值的型別是由( )。 a. return語句中的表示式型別所決定 b. 呼叫該函式時的主調函式類

8樓:匿名使用者

當然是由函式決定的啊:

比如宣告一個函式

int prot(int *, int);

那麼這個函式的返回值int型返回值。

可以寫成return xx -->xx是int型,如果這裡你寫成其它型的(如a說的),編譯會報錯

再就是函式宣告寫成prot(int *, int), //不給他宣告返回型別。

pc機會隱式的讓返回值為int型,如果你return 0.32, 返回去的值其實是0.

9樓:江偉

函式形式為:型別說明符 函式名()

其實函式返回值的型別是由 型別說明符 所確定的型別決定的

(你的選項沒貼全吧)

10樓:

應該是有定義的時候決定的!

11樓:

看了你的補充,答案不變,選b

決定權是b,也就是函式原型或者首次宣告函式指標時決定的。

如果你給一個其他於此的型別的返回值作為return的引數,編譯器在編譯過程中會告訴你這個錯誤(如果能自動轉換可能會告訴你警告,不同的編譯器處理方式不同)。

答a(絕對錯誤)的我不知道有沒有學過c語言,這個返回值不能當作函式出口,函式原型才是函式出口和入口的說明,如果return能夠決定返回型別的話,你想想看,使用if-elseif-else語句或者switch是不是一個函式可以返回多個型別的返回值了?呢這個世界還不亂套了???

在c語言中,函式返回值的資料型別取決於什麼?

12樓:亢瑾瑜千淑

c:在定義函式時所指定的資料型別

例如:int

fun();//這個函式的返回值就必須是個整型的值再如struct

*fun()//那他就必須返回一個結構體指標

13樓:衷陣符鶯

選擇c,函bai數返回

值的型別和du函式名師沒有

zhi關係的,函式dao名只是個簡單的代號回,沒有什麼特殊答的意義,return

語句中表示式的資料型別必須和

定義函式是所指定的資料型別一樣才可以,否則會出錯。至於主調函式,強調一下。

主調函式一般都是void

也就是空型的,沒有什麼特殊用處,也只是為了保持函式格式的一致。

14樓:左手煙雨

程式 從main函式開始執行;

函式返回值的型別取決於函式的型別,函式定義是什麼型別,返回值會被強制轉化為函式的型別。

例如:int f();的返回值是int, float f();的返回值是float

15樓:于于祥祥

取決於你的需求,若你需要整形就設為 int 函式名(引數),其它一樣

從main()函式開始的都是

16樓:匿名使用者

是由你定義函來數時所定源

義的函式的型別決定的。

也就bai

是說你du的函式是什麼類zhi型,返回值就是什麼dao型別。

比如:函式定義 int fun(int a,char b)返回值就是整型

函式定義 int *fun(int a)返回值就是基型別為整型的指標

函式定義 void fun(int a)無返回值

17樓:匿名使用者

main()函式是整個程式的入口啊

返回型別其他人說的很清楚了

你還是去弄本書看吧,看完了就不會問這麼無聊的問題了

返回值和函式值的問題,C 函式返回值問題

函式值跟返回值本來就是一回事。乙個函式只能返回乙個值,這個值是通過renturn 語句返回給main 函式的。函式前面的int就是定義的返回值型別。也就是這個被調函式工作完了,要給main函式乙個值,這個值的型別是int,如果你的int換成是float,char 以及其他任意資料型別,那麼retur...

c語言中函式呼叫與返回值的關係是什麼

函式呼叫和返回值的關係其實和賦值運算的道理是一樣的只是,函式將計算機過程封裝,實現複雜的計算過程和提供良好的 重用。int sum int arg1,int arg2 函式原型int x x sum 1,3 呼叫函式,其中這裡的1,3我們稱為形式引數,它告訴函式要怎麼做。而函式是負責要做什麼 還是拿...

在c語言中主函式是不是必須要有返回值

main 函式的返回值型別必須是 int 這樣返回值才能傳遞給程式的啟用者 如作業系統 如果 main 函式的最後沒有寫 return 語句的話,c99 規定編譯器要自動在生成的目標檔案中 如 exe 檔案 加入return 0 表示程式正常退出。在c語言標準中強制要求main函式的返回值型別為in...