在北京程序設(shè)計(jì)語言的發(fā)展過程中,過程抽象是一個(gè)重要的、具有里程碑意義的概念。過程抽象是指在程序中,可以將一系列語句寫成一個(gè)有名稱和參數(shù)的子程序,然后在需要的地方調(diào)用,實(shí)現(xiàn)了計(jì)算過程的抽象和代碼的復(fù)用。
人們在解決一個(gè)復(fù)雜問題時(shí),通常采用逐步分解和分而治之的方法,即將一個(gè)大的復(fù)雜問題分解成幾個(gè)更容易解決的小問題,然后分別解決。同樣,程序員在設(shè)計(jì)一個(gè)復(fù)雜的程序時(shí),往往會把整個(gè)程序分成幾個(gè)功能相對單一、功能相對獨(dú)立的子程序,然后分別實(shí)現(xiàn),最后像搭積木一樣把所有的子程序拼裝起來。
過程和函數(shù)是兩種不同類型的子例程。過程是用于參數(shù)化計(jì)算的一系列語句,通常沒有返回值。函數(shù)在結(jié)構(gòu)上類似于過程,但函數(shù)通常有一個(gè)返回值。在C、C++等語言中,過程和函數(shù)統(tǒng)一為一種形式的函數(shù)。
在程序中使用函數(shù)時(shí),需要定義函數(shù)并調(diào)用函數(shù)。每種編程語言都提供了相應(yīng)的函數(shù)定義和調(diào)用規(guī)則。函數(shù)定義描述了函數(shù)做什么以及它是如何做的,函數(shù)調(diào)用使用已經(jīng)定義的函數(shù)。1.函數(shù)定義
一個(gè)函數(shù)定義通常由兩部分組成: 函數(shù)頭和函數(shù)體。函數(shù)頭給出一個(gè)契約來解釋如何使用一個(gè)函數(shù); P號體使用語句來描述具體的功能和功能的實(shí)現(xiàn)細(xì)節(jié)。函數(shù)定義的一般格式是:
返回值類型函數(shù)名(形參列表),/函數(shù)頭
{
函數(shù)體;
}
數(shù)頭描述了函數(shù)返回值的數(shù)據(jù)類型、函數(shù)名稱和函數(shù)運(yùn)行時(shí)需要的參數(shù)(稱為形參)及其類型。函數(shù)實(shí)現(xiàn)的功能在函數(shù)體中描述。2.函數(shù)調(diào)用
當(dāng)一個(gè)函數(shù)(稱為調(diào)用函數(shù))需要使用另一個(gè)函數(shù)(稱為被調(diào)用函數(shù))已經(jīng)實(shí)現(xiàn)的函數(shù)時(shí),調(diào)用它并帶上名稱和參數(shù),這稱為函數(shù)調(diào)用。在使用函數(shù)時(shí),只要知道如何調(diào)用就可以了,不需要關(guān)心被調(diào)用函數(shù)的內(nèi)部實(shí)現(xiàn)。因此,調(diào)用函數(shù)需要給出被調(diào)用函數(shù)的名稱、傳遞給被調(diào)用函數(shù)的參數(shù)(實(shí)際參數(shù))以及如何處理返回值。
函數(shù)調(diào)用的一般形式是:
函數(shù)名(參數(shù)列表);
在實(shí)現(xiàn)一個(gè)函數(shù)調(diào)用時(shí),系統(tǒng)需要做一系列的處理,包括保存場景、傳遞實(shí)參、將控制權(quán)轉(zhuǎn)移給被調(diào)用函數(shù)等,調(diào)用完成后需要還原場景,通過return值,并將控制權(quán)交還給調(diào)用函數(shù)。
表7-4是函數(shù)定義和函數(shù)調(diào)用的例子,其中函數(shù)power的作用是求解實(shí)數(shù)x的k次方。
函數(shù)調(diào)用的含義如圖7-7所示,調(diào)用函數(shù)調(diào)用者在其語句“y=power(a,4);”中調(diào)用了函數(shù)power。因此,調(diào)用者在執(zhí)行過程中,函數(shù)在執(zhí)行調(diào)用時(shí),將實(shí)參a和4的值傳遞給形參x和k,控制流就轉(zhuǎn)移到函數(shù)power開始執(zhí)行。遇到return p,計(jì)算返回值,power的執(zhí)行結(jié)束。之后控制流返回調(diào)用函數(shù)caller并將返回值傳遞給y,然后執(zhí)行“Y=power(a,4);”之后的語句在來電者中。3.參數(shù)與參數(shù)傳遞
在程序中使用函數(shù)時(shí),參數(shù)起著調(diào)用函數(shù)和被調(diào)用函數(shù)之間傳遞信息的作用。 參數(shù)通常有形參和實(shí)參兩種。形式參數(shù)(Parameter,簡稱形式參數(shù))在定義函數(shù)時(shí)出現(xiàn)在函數(shù)頭中,以表示一定量的特征參數(shù)的形式出現(xiàn);實(shí)參(Argument,簡稱實(shí)參)出現(xiàn)在函數(shù)調(diào)用中,對應(yīng)于形參的具體內(nèi)容。
比如前面定義的函數(shù)power,函數(shù)頭是“double power(double x, int k)',其中x和k為形參。函數(shù)調(diào)用power(3.5,4)實(shí)現(xiàn)計(jì)算3.54, 3.5和4為實(shí)參,函數(shù)調(diào)用power(a,m)實(shí)現(xiàn)了am的計(jì)算,a和m為實(shí)參,需要將實(shí)參變量a的值傳遞給形參x,而傳遞實(shí)參變量m的值給形參k,調(diào)用時(shí),實(shí)參a和m必須有確定的值,函數(shù)實(shí)際參與的形參是對應(yīng)的,實(shí)現(xiàn)函數(shù)調(diào)用時(shí),實(shí)參必須將值傳遞給形參,參數(shù)傳遞是指在函數(shù)被調(diào)用時(shí),實(shí)際上參與了形參的匹配動作,如果將值從實(shí)參傳遞給形參,則調(diào)用相應(yīng)的調(diào)用轉(zhuǎn)接電話;如果傳遞的是實(shí)參的地址(或者引用傳遞),則稱為Call by reference。下面是一個(gè)實(shí)現(xiàn)兩個(gè)整型變量的函數(shù)的例子,它交換值來簡單解釋一下按值調(diào)用和引用調(diào)用
調(diào)用方式下的參數(shù)傳遞問題,其中swapl采用的是傳值調(diào)用,swap2采用的是引用調(diào)用,它們的定義和調(diào)用如表7-5所示。在傳值調(diào)用方式中,形參將取得實(shí)參的值。在這種方式下,形參與實(shí)參分別對應(yīng)不同的存儲單元.以函數(shù)swapl為例,在函數(shù)調(diào)用語句swapl (a, b)得到執(zhí)行之前,系統(tǒng)還沒有為形參分配存儲單元,如圖7-8(a)所示。函數(shù)調(diào)用語句執(zhí)行時(shí),系統(tǒng)為形參x,y分配存儲單元,實(shí)參a和b的值分別傳遞給形參x和y。在函數(shù)swapl執(zhí)行時(shí),確實(shí)將x和y的值作了交換,但此時(shí)x與a無關(guān)、y與b無關(guān),所以a和b的值并沒有得到交換,如圖7-8 (c)所示.實(shí)際卜,被調(diào)用函數(shù)執(zhí)行結(jié)束后,形參的存儲空間就被系統(tǒng)回收了。
在引用調(diào)用方式下,形參表示的是實(shí)參的存儲位置,形參可以看成是實(shí)參之存儲位置的代名詞。因此,在函數(shù)swap2中,交換x與Y的值就等同于交換a與b的值,調(diào)用結(jié)束后實(shí)現(xiàn)了對a和b值的交換處理。
4.標(biāo)準(zhǔn)庫函數(shù)
編寫程序時(shí),并不需要也不應(yīng)當(dāng)一切都從頭開始,而應(yīng)當(dāng)盡可能地利用前人的成果,以提高開發(fā)的速度和質(zhì)量。為此,每種程序設(shè)計(jì)語言在發(fā)布時(shí)都包含了一些隨程序開發(fā)環(huán)境提供的函數(shù)庫,供編程人員開發(fā)程序時(shí)調(diào)用,如C語言的標(biāo)準(zhǔn)庫等。由編譯程序開發(fā)商和第三方提供的函數(shù)庫,實(shí)現(xiàn)了許多公用的或常用的功能,這些函數(shù)在準(zhǔn)確性、高效性和可移植性方面更有保證。
存放在函數(shù)庫中的函數(shù)稱為庫函數(shù).庫函數(shù)具有明確的功能、人口參數(shù)和返回值。
函數(shù)庫以文件方式提供。例如,擴(kuò)展名為lib或dll的文件通常就是某種函數(shù)庫。
我們專注高端建站,小程序開發(fā)、軟件系統(tǒng)定制開發(fā)、BUG修復(fù)、物聯(lián)網(wǎng)開發(fā)、各類API接口對接開發(fā)等。十余年開發(fā)經(jīng)驗(yàn),每一個(gè)項(xiàng)目承諾做到滿意為止,多一次對比,一定讓您多一份收獲!