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...