回覆列表
  • 1 # IT劉小虎

    在我之前的問答裡,我介紹了怎樣定義自己的函式,並且給出了例子。

    C語言函式的引數

    不過,示例自定義的函式既沒有返回值,也沒有引數,但是實際應用中,要解決複雜的問題,函式應該能夠根據外界的輸入做出相應的變化。

    例如,我們需要打印出 4+6 的值,相關的C語言函式可以如下定義:

    的確,add 函式能夠打印出 4+6 的值,解決了問題。但是,可能還會有類似,但不相同的問題出現,比如需要打印出 3+4 的值,這時上面定義的 add 函式就沒有辦法解決問題了,只能重新定義一個函式,這就非常麻煩了。

    事實上,C語言中的函式可以接收外界傳入的資料,我們如下修改 add 函式:

    這樣,add 函式解決的就不是一個問題了,而是一類問題,列印 4+6 的值只需呼叫 add(4, 6),打印出 3+4 的值,只需呼叫 add(3, 4)。

    C語言函式的“形參”和“實參”

    看了我之前文章的朋友應該明白,函式的引數在某種意義上也屬於區域性變數,在 C 語言中,函式的引數分為“形參”和“實參”。

    以上面定義的 add 函式為例,我們呼叫 add(4, 6) 時,函式中的引數 a 就代表 4,b 就代表 6。確切的說,當我們討論函式中的 a 這個引數時,我們所說的“引數”是指“形參”,當我們討論傳一個引數 4 給函式時,我們所說的“引數”是指“實參”。

    但是我習慣都叫引數而不習慣總把形參、實參這兩個文縐縐的詞掛在嘴邊兒(事實上大多數人都不習慣),可根據上下文判斷指的到底是形參還是實參。

    記住這條基本原理:形參相當於函式中定義的變數,呼叫函式傳遞引數的過程相當於定義形參變數並且用實參的值來初始化。

    上面在 main 中呼叫了 add 函式,就相當於在 add 函式中執行了如下語句:

    main 函式的變數 p1 和 add 函式的引數 a 是兩個不同的變數,只不過它們各自的儲存空間中存了相同的值 4,因為變數 p1 的值賦給了引數 a。同理,變數 p2 的值賦給了引數 b。

    C語言中在呼叫函式時,每個引數都需要得到一個值,函式定義中有幾個引數,在呼叫中就需要傳幾個引數,不能多也不能少,每個引數的型別也必須對應上。

    易錯點

    現在再來說說C語言初學者使用函式時,經常容易犯的錯誤,請看下面的C語言程式碼:

    該程式設計師原計劃讓 add 函式實現引數 p 加一,但是卻失敗了,以上程式碼輸出的是 p=2。這是因為 add 函式中的引數 a 和 main 函式中的 p 根本就是兩個變數。add 函式在執行完畢後,它所在的記憶體就被收回了。

    關於這一點,我之前的問答已經解釋的比較清楚,感到陌生的朋友,可以再回顧一下。

    上一節,我們把自定義函式比作自己做積木,那自定義帶引數的函式,就相當於製作可以變形的積木,更加靈活,所以能夠完成更多工作。

  • 中秋節和大豐收的關聯?
  • 我想買一隻便宜點的貓咪?