一、函式呼叫
什么是函式呼叫呢?通常在C語言中,一個完整的專案程式是不可能在一個函式中實作所有的功能,而是由若干功能不同的函式來實作,并且函式之間會存在互相呼叫的情況,
當然了,也不是說就一定要把函式的功能模塊都分開來寫,但是如果你寫成了下面這個樣子:

我估計以后你的專案經理肯定會對你好(ba)言(dao)相(xiang)勸(xiang)的,

二、函式的呼叫方式
函式是C語言的基本組成元素,如果你要想實作函式的功能,那么你就必須學會正確呼叫函式,呼叫的語法格式如下:

從上面的語法格式可以看出,當我們呼叫一個函式時,需要明確函式名和實參串列,實參串列中的引數可以是常量、變數、運算式或者空,并且各引數之間要使用英文逗號分隔開來,
根據函式在程式中出現的位置,有下列三種函式呼叫方式:
1、將函式作為運算式呼叫
將函式作為運算式呼叫時,函式的回傳值參與運算式的運算,此時要求函式必須有回傳值,示例代碼如下所示:

2、將函式作為陳述句呼叫
函式以陳述句的形式出現時,可以將函式作為一條陳述句進行呼叫,示例代碼如下所示:

3、將函式作為實參呼叫
將函式作為另一個函式的實參時,要求該函式有回傳值,示例代碼如下所示:

在上面的陳述句中,將函式max()的回傳值作為printf()函式的實參來使用,
三、嵌套呼叫
在C語言中,函式的定義是獨立的,也就是說,一個函式不能定義在另一個函式內部,
但在呼叫函式時,可以在一個函式中呼叫另一個函式,這就是函式的嵌套呼叫,接下來我們通過一個案例來演示函式的嵌套呼叫,
案例一:

運行結果:

在這個案例中,main()函式中呼叫了 max4()函式,max4()函式中又呼叫了max2()函式,
為了讓大家能夠更好地理解這個程式執行的流程,我們通過一張圖來描述:

這張圖展示了程式中含有三層函式呼叫嵌套的情形,總共分為9個步驟,具體如下:
(1) 執行main()函式的開頭部分;
(2) 遇到函式呼叫陳述句,呼叫max4()函式,流程轉向max4()函式入口;
(3) 執行max4()函式的開頭部分;
(4) 遇到函式呼叫陳述句,呼叫max2()函式,流程轉向max2()函式入口;
(5) 執行max2()函式,如果再無其他嵌套的函式,則完成max2()函式的全部操作;
(6) 回傳到max2()函式中呼叫max4函式的位置;
(7) 繼續執行max4()函式中尚未執行的部分,直到max4()函式結束;
(8) 回傳main()函式中呼叫max4()函式的位置;
(9) 繼續執行main()函式的剩余部分直到結束,
& 多學一招:函式呼叫時最多可以嵌套多少層?
大家肯定會問:“既然函式嵌套呼叫和普通的呼叫看上去沒什么區別,那是不是可以進行無限層的函式嵌套呼叫呢?”
很遺憾,函式可以嵌套呼叫多少層是由程式運行時一個名為“堆疊”的資料結構決定的,
一般而言,Windows上程式的默認堆疊大小大約為8KB,每一次函式呼叫至少占用8個位元組,因此粗略計算下,函式呼叫只能嵌套大約一千層,如果嵌套呼叫的函式里包含許多變數和引數,實際值要遠遠小于這個數目,
當然,單純手動書寫代碼寫出一千層嵌套函式呼叫基本是不可能的,但是一種名為“遞回”的方法可以輕松達到這個上限,
四、遞回呼叫
在數學運算中,會遇到計算多個連續自然數之間的和的情況,
例如要計算1~n之間自然數之和,就需要先計算1加2的結果,用這個結果加3再得到一個結果,用新得到的結果加4,以此類推,直到用1~(n-1)之間所有數的和加n,
在程式開發中,要想完成上述功能,就需要使用函式的遞回呼叫,所謂的遞回呼叫就是函式內部呼叫自身的程序,
需要注意的是,遞回必須要求有結束條件,不然就會陷入無限遞回的狀態,永遠無法結束呼叫,接下來通過一個計算自然數之和的案例來學習遞回呼叫,
案例二:

運行結果:

案例二中,我們定義了一個getsum()函式用于計算1~n之間自然數之和,
案例中的第9行代碼相當于在getsum()函式的內部呼叫了自身,這就是函式的遞回,整個遞回程序在n==1時結束,
由于函式的遞回呼叫程序很復雜,接下來通過一個圖例來分析整個呼叫程序,

這張圖中描述了遞回呼叫的程序,整個遞回程序中getsum()函式被呼叫了4次,每次呼叫時,n的值都會遞減,
當n的值為1時,所有遞回呼叫的函式都會以相反的順序相繼結束,所有的回傳值會進行累加,最終得到的結果為10,

最后,不管你是轉行也好,初學也罷,進階也可,如果你想學編程~
【值得關注】我的 C/C++編程學習交流俱樂部!【點擊進入】
問題答疑,學習交流,技術探討,還有超多編程資源大全,零基礎的視頻也超棒~
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/245019.html
標籤:C
