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語言如何把函式的返回值傳遞給另函式
蕭竣閏 在另一個函式內呼叫該函式。從而得到該函式的返回值,實現傳遞。例 int sum int m,int n void main 此例中,main函式在輸出語句中呼叫sum函式從而得到sum函式的返回值並輸出 用一個變數 記住 函式的返回值,然後在另一個函式中使用這個變數 要把變數設定成全域性變數...
C語言可以返回字串嗎?可以的話返回值型別是什麼呢?能否舉個例子。謝謝
劉劉 c語言返回字串有四種方式 1。使用堆空間,返回申請的堆地址,注意釋放2。函式引數傳遞指標,返回該指標3。返回函式內定義的靜態變數 共享 4。返回全域性變數使用分配的記憶體,地址是有效 char fun 但這種方式需要注意,必須由使用將將返回的地址free掉將地址由入參傳入 char fun c...
C語言main函式一定要有返回值麼
不一定,看你如何寫了 int main 要求有一個int型的返回值,返回語句return 0 void main 沒有返回值,返回語句return 或不寫。其他函式也是這個規則。在c語言中,主函式是不是必須要有返回值?main 函式的返回值型別必須是 int 這樣返回值才能傳遞給程式的啟用者 如作業...