【C語言】函數(shù)的概念和函數(shù)的調(diào)用(參數(shù)傳遞) | 您所在的位置:網(wǎng)站首頁 › 屬兔進(jìn)(jìn)門玄關(guān)(guān)放什么擺件好 › 【C語言】函數(shù)的概念和函數(shù)的調(diào)用(參數(shù)傳遞) |
文章目錄
一、函數(shù)的定義 二、參數(shù)傳遞 1.參數(shù) 2.傳遞參數(shù)的方式 3.函數(shù)調(diào)用 一、函數(shù)的定義在C語言中,最基礎(chǔ)的程序模塊是函數(shù)。函數(shù)被視為程序中基本的邏輯單位,一個(gè)C程序是由一個(gè)main()函數(shù)和若干普通函數(shù)組成。 定義一個(gè)函數(shù)的語法格式如下: 返回值類型? ? 函數(shù)名([參數(shù)類型1? 參數(shù)名1],[參數(shù)類型2? 參數(shù)名2],[參數(shù)類型3? 參數(shù)名3]...) { ? ? 函數(shù)體 ? ?...... ? ? return 返回值; } 函數(shù)主要包含:返回值類型、函數(shù)名、參數(shù)類型、參數(shù)、函數(shù)體、返回值 各部分解析: 返回值類型:用于限定函數(shù)返回值類型,當(dāng)返回類型為void時(shí),return語句可以省略。函數(shù)名:表示函數(shù)的名稱。參數(shù)類型:用于限定調(diào)用函數(shù)時(shí)傳入函數(shù)中的數(shù)據(jù)類型。參數(shù):用于接收傳入函數(shù)的數(shù)據(jù)return關(guān)鍵字:用于結(jié)束函數(shù),將函數(shù)的返回值返回函數(shù)調(diào)用處。【注意】 ?如果函數(shù)不需要返回值,則函數(shù)的返回值類型應(yīng)被定義為void,函數(shù)的返回值就可以省略。 [參數(shù)類型1? 參數(shù)名1],[參數(shù)類型2? 參數(shù)名2],[參數(shù)類型3? 參數(shù)名3]...稱為參數(shù)列表,如果函數(shù)不需要接收參數(shù),參數(shù)列表為空,此時(shí)函數(shù)稱為無參函數(shù)。 二、參數(shù)傳遞 1.參數(shù)程序在編譯或運(yùn)行時(shí),使用某個(gè)函數(shù)來完成相關(guān)功能,稱之為函數(shù)調(diào)用。函數(shù)在被調(diào)用時(shí),可以通過函數(shù)的參數(shù)列表,進(jìn)行數(shù)據(jù)傳遞。函數(shù)中的參數(shù)有兩種,分別為形式參數(shù)和實(shí)際參數(shù)。 (1)形式參數(shù) 在定義函數(shù)時(shí),函數(shù)名后括號中的變量名稱為形式參數(shù)或虛擬參數(shù),簡稱“形參”。例如下面函數(shù)聲明語句: int func(int a,int b); 變量a和b就是形式參數(shù),這樣的形參并不占用實(shí)際內(nèi)存,僅為了標(biāo)識函數(shù)的參數(shù)列表而存在。? (2)實(shí)際參數(shù) 在函數(shù)被調(diào)用時(shí),函數(shù)名后小括號內(nèi)的參數(shù)稱為實(shí)際參數(shù),簡稱“實(shí)參”。實(shí)參可以是常量、變量、表達(dá)式。例如以下調(diào)用語句: func(3,5); 此行代碼是對函數(shù)func的調(diào)用,數(shù)據(jù)‘3’和‘5’分別對應(yīng)參數(shù)列表a和b。當(dāng)函數(shù)被調(diào)用時(shí),形參是真正的變量,占用內(nèi)存空間,此時(shí)具體的數(shù)據(jù)“3”和“5”就被傳遞給函數(shù)參數(shù)列表中的變量a和b。在函數(shù)調(diào)用時(shí),形參獲取實(shí)參的數(shù)據(jù)(相當(dāng)于進(jìn)行了賦值),該數(shù)據(jù)在本次函數(shù)調(diào)用時(shí)有效,一旦調(diào)用的函數(shù)執(zhí)行完畢,形參的值就會被釋放。 【注意】形參和實(shí)參的數(shù)據(jù)傳遞是單向的,只能是由實(shí)參傳遞給形參,不能由形參傳遞給實(shí)參。? 2.傳遞參數(shù)的方式傳遞參數(shù)的方式有:按值傳遞和按引用傳遞兩種(值傳遞和地址傳遞) 按值傳遞實(shí)參時(shí),程序會將實(shí)參創(chuàng)建一個(gè)副本,將這個(gè)副本傳遞給被調(diào)函數(shù)。對這個(gè)副本的修改不會影響到主調(diào)函數(shù)中原來參數(shù)變量的值。按引用傳遞實(shí)參時(shí),主調(diào)函數(shù)則會允許被調(diào)函數(shù)修改相應(yīng)的實(shí)參變量的值。若被調(diào)函數(shù)不需要修改主調(diào)函數(shù)中實(shí)參變量的值,則應(yīng)采用按值傳遞的方式。這樣可以防止意外的副作用(變量被修改)。 只有在被調(diào)函數(shù)需要修改主調(diào)函數(shù)中的變量而這個(gè)被調(diào)函數(shù)又是可信任的時(shí)候,才可以使用按引用傳遞。 【注意】C語言中,所有的實(shí)參都是按值傳遞。如果被傳遞的參數(shù)是一個(gè)數(shù)組名,并且在函數(shù)中使用下標(biāo)引用該數(shù)組的參數(shù),那么在函數(shù)中對數(shù)組元素進(jìn)行修改實(shí)際上修改的是調(diào)用程序中的數(shù)組元素。函數(shù)將訪問調(diào)用程序的數(shù)組元素,數(shù)組并不會被復(fù)制。這就是按引用傳遞,也就是“傳址調(diào)用”。 數(shù)組的這一行為看似與按值傳遞規(guī)則相悖。但其實(shí)并不矛盾——數(shù)組名實(shí)際上是一個(gè)指針,傳遞給函數(shù)的是這個(gè)指針對一個(gè)副本。下標(biāo)引用實(shí)際上是間接訪問的另一種形式,這個(gè)副本上執(zhí)行間接訪問的是原先的數(shù)組。 案例演示:交換兩個(gè)整數(shù) 1.值傳遞方式 #include void swap(int a, int b) { int temp = a; a = b; b = temp; printf("交換函數(shù)結(jié)果:a=%-5d b=%-5d\n", a, b); } int main() { int a = 3, b = 4; swap(a, b); printf("主函數(shù)交換結(jié)果:a=%-5d b=%-5d\n", a, b); }運(yùn)行結(jié)果:
結(jié)果分析: 由上面運(yùn)行結(jié)果可知,調(diào)用swap函數(shù)后,只對副本a,b進(jìn)行了交換,并沒有修改實(shí)參的值。值傳遞不影響主函數(shù)中原來參數(shù)變量的值。 2.地址傳遞方式 #include void swap(int *a, int *b) { int temp = *a; *a = *b; *b = temp; printf("交換函數(shù)結(jié)果:a=%-5d b=%-5d\n", *a, *b); } int main() { int a = 3, b = 4; swap(&a, &b); printf("主函數(shù)交換結(jié)果:a=%-5d b=%-5d\n", a, b); }運(yùn)行結(jié)果:
結(jié)果分析: 向swap函數(shù)傳遞想要修改的變量a,b的指針,函數(shù)通過指針的間接訪問作,修改了a,b的值。 3.函數(shù)調(diào)用(1)主函數(shù)調(diào)用普通函數(shù) (2)嵌套調(diào)用 (3)遞歸調(diào)用:函數(shù)調(diào)用自身。 主函數(shù)可以調(diào)用普通函數(shù),普通函數(shù)可以相互調(diào)用,但不能調(diào)用主函數(shù)。 當(dāng)調(diào)用一個(gè)函數(shù)時(shí),需要明確函數(shù)名和實(shí)參列表。要求實(shí)參和形參必須滿足三個(gè)條件:參數(shù)個(gè)數(shù)相等、順序?qū)?yīng)、類型匹配 |
今日新聞 |
推薦新聞 |
專題文章 |
CopyRight 2018-2019 實(shí)驗(yàn)室設(shè)備網(wǎng) 版權(quán)所有 |