本文發(fā)布于微信公眾號(hào):三玹
在前面的文章中,我們其實(shí)有見過(guò)函數(shù),就是C語(yǔ)言程序有且僅有一個(gè)的主函數(shù) main()。因此,可以說(shuō)C語(yǔ)言程序中至少都會(huì)有一個(gè)函數(shù)。
那么,接下來(lái)就來(lái)學(xué)習(xí)一下C語(yǔ)言中函數(shù)的知識(shí)點(diǎn)。函數(shù),也被稱為方法,是一組一起執(zhí)行一個(gè)任務(wù)的語(yǔ)句。做菜是需要洗菜、切菜、炒菜、然后把菜盛出來(lái)端上桌。如果沒有函數(shù),代碼上我們每次就都要把這些步驟一個(gè)一個(gè)地寫清楚,做一道菜寫一堆這樣的步驟。
但是有了函數(shù)就不一樣了。我把這些步驟都整合在一起,把它變成一個(gè)函數(shù),等我需要做菜的時(shí)候,就只需要把這個(gè)函數(shù)拿出來(lái)用。誒,這就比每次都要寫一大堆東西輕松得多,就非常方便!type function(parameter list)
{
// body
}
1、type:函數(shù)返回的類型,如 int、float、char等等,這類有明確返回類型的函數(shù),結(jié)果都必須有 return 關(guān)鍵字返回相應(yīng)類型的數(shù)據(jù)。如果函數(shù)不返回類型,則可以使用 void 空類型來(lái)定義函數(shù)。
2、function:函數(shù)的名稱。名稱必須符合標(biāo)識(shí)符的規(guī)則,同時(shí)建議函數(shù)名稱可以按照駝峰式寫法(大駝峰:YouHaveMoney 或者小駝峰:tomorrowIsBetter)。
3、parameter:函數(shù)的參數(shù)列表,可以有,可以沒有,實(shí)際情況根據(jù)函數(shù)的主體內(nèi)容進(jìn)行決定。相當(dāng)于一個(gè)占位符。4、body:函數(shù)的主體部分。即把所有做菜的步驟都包括在這里面,當(dāng)調(diào)用函數(shù)的時(shí)候,就會(huì)順序執(zhí)行這里面的內(nèi)容。
函數(shù)編寫之后,想進(jìn)行實(shí)際應(yīng)用,那就需要調(diào)用。如果不調(diào)用,函數(shù)寫了跟沒寫一樣。他就在那里,你不呼喚他,他是沒有回應(yīng)的。
C語(yǔ)言中的函數(shù)是通過(guò)函數(shù)名();來(lái)進(jìn)行調(diào)用的。#include<stdio.h>
int main(){
HelloWorld();
return 0;
}
void HelloWorld(){
printf("Hello World\n");
}
運(yùn)行結(jié)果:Hello World那么有人就要說(shuō),程序是按順序執(zhí)行的,那我直接把 HelloWorld 這個(gè)函數(shù)直接寫在主函數(shù)里面,那么它運(yùn)行的時(shí)候不也是按順序執(zhí)行,是不是就不用調(diào)用了。在C語(yǔ)言當(dāng)中,循環(huán)是可以嵌套的、判斷也是可以嵌套的,但是函數(shù)是不能嵌套定義的。函數(shù)的定義只能在函數(shù)體之外進(jìn)行定義,無(wú)法在函數(shù)體內(nèi)定義新的函數(shù)。不過(guò)可以嵌套使用,在一個(gè)函數(shù)里面調(diào)用另外一個(gè)函數(shù),就可以實(shí)現(xiàn)函數(shù)的嵌套使用。#include<stdio.h>
int main(){
func2();
return 0;
}
void func1(){
printf("讀者都是英俊瀟灑!美若天仙!\n");
}
void func2(){
func1();
printf("求個(gè)點(diǎn)贊、收藏和分享,可好?");
}
函數(shù)的調(diào)用還有一種方式,叫做遞歸調(diào)用,俗一點(diǎn)講就是我自己用自己。這一個(gè)遞歸稍微講起來(lái)有點(diǎn)復(fù)雜,就暫且不在這里作詳細(xì)展開,后面涉及到遞歸的時(shí)候再說(shuō)說(shuō)。前文提到,參數(shù)的在函數(shù)中相當(dāng)于是一個(gè)占位符的作用。就比如數(shù)學(xué)中的函數(shù),x + y = 10。x 和 y 就是函數(shù)中的參數(shù),它實(shí)際是什么值我不知道,但我知道它們兩個(gè)相加是等于10。那么 x 和 y 的實(shí)際值可以有無(wú)限種可能,x 和 y 在這里就是占個(gè)位置,表示一個(gè)虛的數(shù)值。就例如,我們要計(jì)算兩個(gè)值相加的值,但是不知道用戶實(shí)際應(yīng)用要輸入什么值。那這里就可以使用參數(shù)來(lái)占個(gè)位置。int add(int a, int b){
return a+b;
}
在程序中,參數(shù)是有兩種分類的:形式參數(shù)和實(shí)際參數(shù)。
形式參數(shù),顧名思義,就是形式上的,做個(gè)樣子,沒有實(shí)際X用。
一般,函數(shù)定義時(shí)候的參數(shù),就叫做形式參數(shù)。它們沒有實(shí)際的值,只是擺個(gè)樣子,在這里占個(gè)位置。實(shí)際參數(shù),則是相反的,它是實(shí)在的,有內(nèi)容的。一般是在函數(shù)調(diào)用的時(shí)候,傳遞給函數(shù)的值就叫做實(shí)際參數(shù)。#include<stdio.h>
int main(){
int x = 5;
int y = 9;
int z = add(x, y);
printf("%d", z);
return 0;
}
int add(int a, int b){
return a+b;
}
在這里面,add 函數(shù)定義時(shí),變量 a 和 b 就是形式參數(shù)。
在主函數(shù)中調(diào)用 add 函數(shù)時(shí),傳入的變量 x 和 y 就是實(shí)際參數(shù)。