這篇文章給大家分享的是有關(guān)函數(shù)可以嵌套定義但不能嵌套調(diào)用嗎的內(nèi)容。小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過(guò)來(lái)看看吧。
10年積累的做網(wǎng)站、網(wǎng)站制作經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶(hù)對(duì)網(wǎng)站的新想法和需求。提供各種問(wèn)題對(duì)應(yīng)的解決方案。讓選擇我們的客戶(hù)得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先網(wǎng)站制作后付款的網(wǎng)站建設(shè)流程,更有魚(yú)臺(tái)免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。
錯(cuò),函數(shù)可以嵌套調(diào)用但不可以嵌套定義。在C語(yǔ)言中,所有的函數(shù)都是平行的,即在定義函數(shù)時(shí)是互相獨(dú)立的,一個(gè)函數(shù)并不從屬于另一個(gè)函數(shù),即函數(shù)不能嵌套定義,但可以互相調(diào)用,但不能調(diào)用main函數(shù)。
錯(cuò),函數(shù)可以嵌套調(diào)用但不可以嵌套定義。
C語(yǔ)言 函數(shù)
函數(shù)是一段可以重復(fù)使用的代碼,用來(lái)獨(dú)立地完成某個(gè)功能,它可以接收用戶(hù)傳遞的數(shù)據(jù),也可以不接收。接收用戶(hù)數(shù)據(jù)的函數(shù)在定義時(shí)要指明參數(shù),不接收用戶(hù)數(shù)據(jù)的不需要指明,根據(jù)這一點(diǎn)可以將函數(shù)分為有參函數(shù)和無(wú)參函數(shù)。
將代碼段封裝成函數(shù)的過(guò)程叫做函數(shù)定義。
函數(shù)的定義
如果函數(shù)不接收用戶(hù)傳遞的數(shù)據(jù),那么定義時(shí)可以不帶參數(shù)。如下所示:
dataType functionName(){ //body }
如果函數(shù)需要接收用戶(hù)傳遞的數(shù)據(jù),那么定義時(shí)就要帶上參數(shù)。如下所示:
dataType functionName( dataType1 param1, dataType2 param2 ... ){ //body }
dataType
是返回值類(lèi)型,它可以是C語(yǔ)言中的任意數(shù)據(jù)類(lèi)型,例如 int、float、char 等。
functionName
是函數(shù)名,它是標(biāo)識(shí)符的一種,命名規(guī)則和標(biāo)識(shí)符相同。函數(shù)名后面的括號(hào)( )不能少。
dataType1 param1, dataType2 param2 ...
是參數(shù)列表。函數(shù)可以只有一個(gè)參數(shù),也可以有多個(gè),多個(gè)參數(shù)之間由,分隔。參數(shù)本質(zhì)上也是變量,定義時(shí)要指明類(lèi)型和名稱(chēng)。與無(wú)參函數(shù)的定義相比,有參函數(shù)的定義僅僅是多了一個(gè)參數(shù)列表。
body
是函數(shù)體,它是函數(shù)需要執(zhí)行的代碼,是函數(shù)的主體部分。即使只有一個(gè)語(yǔ)句,函數(shù)體也要由{ }包圍。
如果有返回值,在函數(shù)體中使用 return 語(yǔ)句返回。return 出來(lái)的數(shù)據(jù)的類(lèi)型要和 dataType 一樣。
return是C語(yǔ)言中的一個(gè)關(guān)鍵字,只能用在函數(shù)中,用來(lái)返回處理結(jié)果。
示例:
#includeint sum(){ int i, sum=0; for(i=1; i<=100; i++){ sum+=i; } return sum; } int main(){ int a = sum(); printf("The sum is %d\n", a); return 0; }
運(yùn)行結(jié)果:
The sum is 5050
函數(shù)不能嵌套定義,main 也是一個(gè)函數(shù)定義,所以要將 sum 放在 main 外面。函數(shù)必須先定義后使用,所以 sum 要放在 main 前面。
注意:main 是函數(shù)定義,不是函數(shù)調(diào)用。當(dāng)可執(zhí)行文件加載到內(nèi)存后,系統(tǒng)從 main 函數(shù)開(kāi)始執(zhí)行,也就是說(shuō),系統(tǒng)會(huì)調(diào)用我們定義的 main 函數(shù)。
教程
函數(shù)調(diào)用
所謂函數(shù)調(diào)用(Function Call),就是使用已經(jīng)定義好的函數(shù)。函數(shù)調(diào)用的一般形式為:
functionName(param1, param2, param3 ...);
functionName 是函數(shù)名稱(chēng),param1, param2, param3 ...是實(shí)參列表。實(shí)參可以是常數(shù)、變量、表達(dá)式等,多個(gè)實(shí)參用逗號(hào),分隔。
在C語(yǔ)言中,函數(shù)調(diào)用的方式有多種,例如:
//函數(shù)作為表達(dá)式中的一項(xiàng)出現(xiàn)在表達(dá)式中 z = max(x, y); m = n + max(x, y); //函數(shù)作為一個(gè)單獨(dú)的語(yǔ)句 printf("%d", a); scanf("%d", &b); //函數(shù)作為調(diào)用另一個(gè)函數(shù)時(shí)的實(shí)參 printf( "%d", max(x, y) ); total( max(x, y), min(m, n) );
函數(shù)的嵌套調(diào)用
函數(shù)不能嵌套定義,但可以嵌套調(diào)用,也就是在一個(gè)函數(shù)的定義或調(diào)用過(guò)程中允許出現(xiàn)對(duì)另外一個(gè)函數(shù)的調(diào)用。
【示例】計(jì)算sum = 1! + 2! + 3! + ... + (n-1)! + n!
分析:可以編寫(xiě)兩個(gè)函數(shù),一個(gè)用來(lái)計(jì)算階乘,一個(gè)用來(lái)計(jì)算累加的和。
#include//求階乘 long factorial(int n){ int i; long result=1; for(i=1; i<=n; i++){ result *= i; } return result; } // 求累加的和 long sum(long n){ int i; long result = 0; for(i=1; i<=n; i++){ //在定義過(guò)程中出現(xiàn)嵌套調(diào)用 result += factorial(i); } return result; } int main(){ printf("1!+2!+...+9!+10! = %ld\n", sum(10)); //在調(diào)用過(guò)程中出現(xiàn)嵌套調(diào)用 return 0; }
運(yùn)行結(jié)果:
1!+2!+...+9!+10! = 4037913
sum() 的定義中出現(xiàn)了對(duì) factorial() 的調(diào)用,printf() 的調(diào)用過(guò)程中出現(xiàn)了對(duì) sum() 的調(diào)用,而 printf() 又被 main() 調(diào)用,它們整體調(diào)用關(guān)系為:
main() --> printf() --> sum() --> factorial()
如果一個(gè)函數(shù) A() 在定義或調(diào)用過(guò)程中出現(xiàn)了對(duì)另外一個(gè)函數(shù) B() 的調(diào)用,那么我們就稱(chēng) A() 為主調(diào)函數(shù)或主函數(shù),稱(chēng) B() 為被調(diào)函數(shù)。
當(dāng)主調(diào)函數(shù)遇到被調(diào)函數(shù)時(shí),主調(diào)函數(shù)會(huì)暫停,CPU 轉(zhuǎn)而執(zhí)行被調(diào)函數(shù)的代碼;被調(diào)函數(shù)執(zhí)行完畢后再返回主調(diào)函數(shù),主調(diào)函數(shù)根據(jù)剛才的狀態(tài)繼續(xù)往下執(zhí)行。
一個(gè)C語(yǔ)言程序的執(zhí)行過(guò)程可以認(rèn)為是多個(gè)函數(shù)之間的相互調(diào)用過(guò)程,它們形成了一個(gè)或簡(jiǎn)單或復(fù)雜的調(diào)用鏈條。這個(gè)鏈條的起點(diǎn)是 main(),終點(diǎn)也是 main()。當(dāng) main() 調(diào)用完了所有的函數(shù),它會(huì)返回一個(gè)值(例如return 0;)來(lái)結(jié)束自己的生命,從而結(jié)束整個(gè)程序。
函數(shù)是一個(gè)可以重復(fù)使用的代碼塊,CPU 會(huì)一條一條地挨著執(zhí)行其中的代碼,當(dāng)遇到函數(shù)調(diào)用時(shí),CPU 首先要記錄下當(dāng)前代碼塊中下一條代碼的地址(假設(shè)地址為 0X1000),然后跳轉(zhuǎn)到另外一個(gè)代碼塊,執(zhí)行完畢后再回來(lái)繼續(xù)執(zhí)行 0X1000 處的代碼。整個(gè)過(guò)程相當(dāng)于 CPU 開(kāi)了一個(gè)小差,暫時(shí)放下手中的工作去做點(diǎn)別的事情,做完了再繼續(xù)剛才的工作。
感謝各位的閱讀!關(guān)于“函數(shù)可以嵌套定義但不能嵌套調(diào)用嗎”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!