帶參數的無返回值(void)函數如何返回處理結果?(附代碼)

2020-12-05 科技研究員猴哥

昨天有讀者問到一個問題,不論是否理解有誤姑且先將本文發出來。

在軟體開發過程中有一種很常見的編程方法,就是即使將參數傳給無返回值的void函數也能實現對原始參數值的修改,這句話到底說的什麼意思,且看示例。

void函數如何返回值

一個例子:普通帶參數的函數如何做返回值?(附代碼)

這是一個帶參數的普通函數,作用是統計字符串中的有效字符數('\0'不算有效字符),返回值即為字符串中的字符總數,類型為int,具體代碼入下:

普通帶參函數返回值例子

代碼中的問題是非常關鍵的,感興趣的讀者可以嘗試在函數中聲明一個變量做返回值,看看會出什麼錯誤!

另一個例子:無返回值的帶參void函數如何做返回值?(附代碼)

void函數是沒有返回值的,那麼對於傳入的參數在計算處理之後,怎麼把結果返回呢?這裡給出兩種最常用的方式:指針和引用!這也是軟體開發中實際使用的方式。

仍然以計算字符串中有效字符總數為例,代碼入下:

void函數如何返回處理結果

其實主要採用的方式就是在主程序中直接聲明一個變量,然後把這個變量的引用或者指針作為參數直接傳遞給void函數,當void函數在做處理時,直接將結果寫到引用參數或者指針指向的主函數變量,這樣就間接實現了「返回值」

總結

在需要調用子函數做處理時,void函數利用引用或者指針來「返回」處理結果是程式設計師經常用到的方式,主要原因是:一可以讓代碼更簡潔,二是能減少內存空間的佔用。

希望大家兩種方式都能掌握,因為很多情況下,尤其是涉及對象返回時,第一種方式的優越性就體現出來了。當然,第二種在void函數中間接「返回」處理結果的方式也要掌握,它是入門程式設計師和程式設計師之間的區別之一。

相關焦點

  • 零基礎java入門教程函數function實例化格式案例void返回值說明
    哈哈哈哈函數的英文單詞function這個一定要認識下面實例化下函數的格式:修飾符 返回值類型 函數名(參數類型 形參1,參數類型 形參2, ……){函數返回值錯誤範例在沒有返回值情況下,我們需要用一個特殊的關鍵詞來標識;void:代表的是函數沒有具體返回值情況;對於函數沒有具體返回值的情況,返回值類型用關鍵字void表示
  • 言C語言陷阱與技巧第21節,函數只能返回一個值嗎?有多個返回值怎麼...
    ,fun() 函數會將最終處理結果 res1 和 res2 存入 a 和 b,利用全局變量的全局可見性,間接的將兩個結果「返回」給 main() 函數。下面是一個使用C語言中的指針語法返回多個值的例子:void fun(int *a, int *b){ ...
  • 深入理解void類型
    毫無疑問,任何一種指針類型都有一個特殊的指針值,即空指針。它既不會指向任何對象或函數,也不是任何對象或函數的地址。而未初始化的指針,則完全可能指向任何地方。由此可見,空指針與未初始化的指針是完全不同的兩個概念。那麼,將如何在程序中獲得一個空指針呢?2.
  • Python 為啥沒有 void 關鍵字呢
    void 是程式語言中最常見的關鍵字之一,從字面上理解,它是「空的、空集、空白」的意思,最常用於表示函數的一種返回值類型。當 void 用在函數前作修飾時,它表示該函數沒有返回值。在 C 語言中,若不聲明返回類型,則f() 函數在編譯後會返回整型的值。為了避免混亂,當不需要返回值時,就使用void f() 來作限定。
  • c++ 槽函數專題及常見問題 - CSDN
    第一個模板參數Signature的含義和function相同,也是一個函數類型,表示signal調用的函數(槽,事件處理handler),例如:signal<void(int, double)> sig
  • 對話框窗口過程返回值的解釋
    因為在傳統的C語言中,一個函數只能返回一個值,但是在對話框窗口過程中需要返回上述提到的兩種信息,那咋辦?需要想出一種方法來返回這兩種信息。方法如下對話框窗口過程的返回值表明了消息是否得到了處理。第二條信息,關於返回值應該是什麼則會在存儲在DWLP_MSGRESULT消息中。換句話說,系統實現的默認對話框過程DefDlgProc,會看起來像如下這樣:如果你返回任何非0值,則通過SetWindowLongPtr(hdlg, DWLP_MSGRESULT, value)設置的值將作為消息的處理結果值。
  • C語言 main 函數到底為啥這麼寫?
    但 凡是學過C語言的人,都知道要先寫main函數,然而很多時候我們看到的main函數卻各有差異,這究竟是為啥? 哪種是對的呢? 今天我們就來聊聊main函數。 直接的mian()並沒有返回值,沒有入參。這種寫法實際來說,部分編譯器會顯示警告,並且會返回默認值為int。不過在C89標準中其實是可以的,由於沒有聲明返回類型,所以才會返回默認值int。
  • C語言中的main()函數可以有好幾種類型,為何都能做入口函數呢?
    為什麼在C語言程序中,可以有不同類型當然,在一些比較舊的教材或者C語言代碼中,讀者可能還見過 void 返回值類型,甚至沒有寫返回值類型的 main() 函數原型:void main();按照我之前文章中的討論,對於可變參數函數,例如 printf() 函數,或者未明確指定參數的函數,例如 void fun(); ,在被調用時,是允許傳入任意多參數的:printf("...");printf("...
  • 你有沒有想過,C語言 main 函數到底為啥這麼寫?
    1、main()直接的mian()並沒有返回值,沒有入參。這種寫法實際來說,部分編譯器會顯示警告,並且會返回默認值為int。不過在C89標準中其實是可以的,由於沒有聲明返回類型,所以才會返回默認值int。
  • 精選20道Java代碼筆試題
    1、運算符優先級問題,下面代碼的結果是多少?因此,結果為8。2、運算符問題,下面代碼分別輸出什麼?那是不是結果應該為12、11、12呢?還要考慮返回值類型,round()返回值類型為long長整型,floor()和ceil()返回值的是double類型,因此正確的答案應該是12、11.0、12.0。
  • 邏輯函數中利用IF函數判斷是與不是,利用NOT函數對參數值求反
    或 FALSE 的任意值或表達式value_if_true 可選.logical_test參數的計算結果為TRUE時所要返回的值.value_if_false 可選.logical_test參數的計算結果為FALSE時所要返回的值.
  • go 學習筆記之學習函數式編程前不要忘了函數基礎
    多返回值定義標準函數Go 語言和其他主流的程式語言明顯不同的是,函數支持多返回值,通常第一個返回值表示真正結果,第二個返回值表示是否錯誤,這也是 Go 關於異常錯誤設計的獨特之處.如果正常返回,則表示沒有錯誤,那麼第一個返回值是正常結果而第二個返回值則是空 nil;如果異常返回,第一個返回值設計無意義的特殊值,第二個返回值是具體的錯誤信息,一般非 nil.
  • 一起學JAVA——數組和函數
    今天我們高級數據類型——數組以及函數的作用。函數(方法)函數的定義函數就是一段有名字的代碼,可以完成某一特定功能。方法(函數)是java的最小代碼重用單位,方法(函數)是為了重用代碼。如果有一段代碼要使用多次,我們可以給它起個名字,每次使用時通過名字調用,這樣就不用每次都寫一大段代碼了。如果某個函數在執行的時候需要調用者傳入數據,那麼可以定義參數列表,用於接收數據。如果函數運行之後需要返回給調用者數據,那麼需要指定返回值類型,並且用關鍵字return返回。
  • 快速解釋如何使用pandas的inplace參數
    介紹在操作dataframe時,初學者有時甚至是更高級的數據科學家會對如何在pandas中使用inplace參數感到困惑。更有趣的是,我看到的解釋這個概念的文章或教程並不多。它似乎被假定為知識或自我解釋的概念。不幸的是,這對每個人來說都不是那麼簡單,因此本文試圖解釋什麼是inplace參數以及如何正確使用它。
  • 在VBA中如何使用動態數組,以及利用動態數組去除重複值的方法
    大家好,我們今日繼續講解VBA數組與字典解決方案第22講:在VBA中如何使用動態數組,以及利用動態數組去除重複值的方法。如果文本中含有大量的重複值,此時,如果我們要剔除重複值,該怎麼辦?用VBA的方法該如何做到呢?我在這講和下一講中將解答這個問題,並提供給讀者一個可以測試的實例。今日先講這個內容要用到的知識點。
  • 值傳遞和引用傳遞傳的到底是啥?
    作者 | 編程指北 責編 | 張文在網上看到過很多討論 Java、C++、Python 是值傳遞還是引用傳遞這類文章,所以這一篇呢就是想從原理講明白關於函數參數傳遞的幾種形式。參數傳遞無外乎就是傳值(pass by value),傳引用(pass by reference)或者說是傳指針。
  • 函數式語言庫模式:框架是魔鬼?
    例如,可以使用Web開發庫 Suave來啟動一個簡單的Web伺服器,代碼如下:代碼片中首先載入了庫,然後以默認方式調用startWebServer。該方式是非常有用的,因為可以讓用戶嘗試不同的參數來對輸出結果進行對比。