回覆列表
  • 1 # 使用者5620642497623

    是由你定義函式時所定義的函式的型別決定的。 也就是說你的函式是什麼型別,返回值就是什麼型別。

  • 2 # 使用者1047557101249

    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 Enwxxxcode-style(const char* src, char* dest);


    用一個引數來代替返回值,而返回值只是指示函式執行是否成功。


    返回一個大物件是困難的,但這個困難存在於 C 程式中,而不是 C++ 程式中。 C 函數里較少透過返回一個指標來返回物件,因為:


    1、如果指標指向棧變數,毫無疑問,要麼不用這個返回值,要麼是一個錯誤;


    2、如果指標指向堆變數,需要用這個函式的程式設計師會好好的看文件且足夠細心會呼叫 free,要麼就是記憶體洩漏;


    3、如果指標指向 static 變數,那麼用這個函式的程式設計師牢牢記住“下次呼叫這個函式以後,上次的返回值也會跟著變”。


    在C++裡直接返回裸指標的話,情況並不會有什麼起色,不過 C++ 有智慧指標的,通常它們指向堆變數,佔用的空間和裸指標一樣大。考慮前面第一個函式,寫成:


    std::auto_ptr


    GetObj();


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


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


    std::auto_ptr<std::string> Enwxxxcode-style(const char

  • 中秋節和大豐收的關聯?
  • 超速前,請把銀行密碼告訴家人!請問如何看待這十三個字?