在北京程序設計語言的發展過程中,過程抽象是一個重要的、具有里程碑意義的概念。過程抽象是指在程序中,可以將一系列語句寫成一個有名稱和參數的子程序,然后在需要的地方調用,實現了計算過程的抽象和代碼的復用。
人們在解決一個復雜問題時,通常采用逐步分解和分而治之的方法,即將一個大的復雜問題分解成幾個更容易解決的小問題,然后分別解決。同樣,程序員在設計一個復雜的程序時,往往會把整個程序分成幾個功能相對單一、功能相對獨立的子程序,然后分別實現,最后像搭積木一樣把所有的子程序拼裝起來。
過程和函數是兩種不同類型的子例程。過程是用于參數化計算的一系列語句,通常沒有返回值。函數在結構上類似于過程,但函數通常有一個返回值。在C、C++等語言中,過程和函數統一為一種形式的函數。
在程序中使用函數時,需要定義函數并調用函數。每種編程語言都提供了相應的函數定義和調用規則。函數定義描述了函數做什么以及它是如何做的,函數調用使用已經定義的函數。1.函數定義
一個函數定義通常由兩部分組成: 函數頭和函數體。函數頭給出一個契約來解釋如何使用一個函數; P號體使用語句來描述具體的功能和功能的實現細節。函數定義的一般格式是:
返回值類型函數名(形參列表),/函數頭
{
函數體;
}
數頭描述了函數返回值的數據類型、函數名稱和函數運行時需要的參數(稱為形參)及其類型。函數實現的功能在函數體中描述。2.函數調用
當一個函數(稱為調用函數)需要使用另一個函數(稱為被調用函數)已經實現的函數時,調用它并帶上名稱和參數,這稱為函數調用。在使用函數時,只要知道如何調用就可以了,不需要關心被調用函數的內部實現。因此,調用函數需要給出被調用函數的名稱、傳遞給被調用函數的參數(實際參數)以及如何處理返回值。
函數調用的一般形式是:
函數名(參數列表);
在實現一個函數調用時,系統需要做一系列的處理,包括保存場景、傳遞實參、將控制權轉移給被調用函數等,調用完成后需要還原場景,通過return值,并將控制權交還給調用函數。
表7-4是函數定義和函數調用的例子,其中函數power的作用是求解實數x的k次方。
函數調用的含義如圖7-7所示,調用函數調用者在其語句“y=power(a,4);”中調用了函數power。因此,調用者在執行過程中,函數在執行調用時,將實參a和4的值傳遞給形參x和k,控制流就轉移到函數power開始執行。遇到return p,計算返回值,power的執行結束。之后控制流返回調用函數caller并將返回值傳遞給y,然后執行“Y=power(a,4);”之后的語句在來電者中。3.參數與參數傳遞
在程序中使用函數時,參數起著調用函數和被調用函數之間傳遞信息的作用。 參數通常有形參和實參兩種。形式參數(Parameter,簡稱形式參數)在定義函數時出現在函數頭中,以表示一定量的特征參數的形式出現;實參(Argument,簡稱實參)出現在函數調用中,對應于形參的具體內容。
比如前面定義的函數power,函數頭是“double power(double x, int k)',其中x和k為形參。函數調用power(3.5,4)實現計算3.54, 3.5和4為實參,函數調用power(a,m)實現了am的計算,a和m為實參,需要將實參變量a的值傳遞給形參x,而傳遞實參變量m的值給形參k,調用時,實參a和m必須有確定的值,函數實際參與的形參是對應的,實現函數調用時,實參必須將值傳遞給形參,參數傳遞是指在函數被調用時,實際上參與了形參的匹配動作,如果將值從實參傳遞給形參,則調用相應的調用轉接電話;如果傳遞的是實參的地址(或者引用傳遞),則稱為Call by reference。下面是一個實現兩個整型變量的函數的例子,它交換值來簡單解釋一下按值調用和引用調用
調用方式下的參數傳遞問題,其中swapl采用的是傳值調用,swap2采用的是引用調用,它們的定義和調用如表7-5所示。
在傳值調用方式中,形參將取得實參的值。在這種方式下,形參與實參分別對應不同的存儲單元.以函數swapl為例,在函數調用語句swapl (a, b)得到執行之前,系統還沒有為形參分配存儲單元,如圖7-8(a)所示。函數調用語句執行時,系統為形參x,y分配存儲單元,實參a和b的值分別傳遞給形參x和y。在函數swapl執行時,確實將x和y的值作了交換,但此時x與a無關、y與b無關,所以a和b的值并沒有得到交換,如圖7-8 (c)所示.實際卜,被調用函數執行結束后,形參的存儲空間就被系統回收了。

在引用調用方式下,形參表示的是實參的存儲位置,形參可以看成是實參之存儲位置的代名詞。因此,在函數swap2中,交換x與Y的值就等同于交換a與b的值,調用結束后實現了對a和b值的交換處理。
4.標準庫函數
編寫程序時,并不需要也不應當一切都從頭開始,而應當盡可能地利用前人的成果,以提高開發的速度和質量。為此,每種程序設計語言在發布時都包含了一些隨程序開發環境提供的函數庫,供編程人員開發程序時調用,如C語言的標準庫等。由編譯程序開發商和第三方提供的函數庫,實現了許多公用的或常用的功能,這些函數在準確性、高效性和可移植性方面更有保證。
存放在函數庫中的函數稱為庫函數.庫函數具有明確的功能、人口參數和返回值。
函數庫以文件方式提供。例如,擴展名為lib或dll的文件通常就是某種函數庫。
我們專注高端建站,小程序開發、軟件系統定制開發、BUG修復、物聯網開發、各類API接口對接開發等。十余年開發經驗,每一個項目承諾做到滿意為止,多一次對比,一定讓您多一份收獲!