?艇搀、函數(shù)分類
回顧
它們都是函數(shù)腋颠,都實現(xiàn)了某?功能袋狞。
? printf 輸出函數(shù)涮坐,?于輸出?個信息
? scanf 輸?函數(shù)凄贩,?于從鍵盤輸??個信息
? strlen 求字符串長度函數(shù),?于求指定字符串的長度
? strcpy 字符串拷貝函數(shù)袱讹,?于實現(xiàn)字符串的賦值
什么是函數(shù)
函數(shù)是具有特定功能的代碼段疲扎。
通俗來說:?連串語句組合在?起,實現(xiàn)了某?功能廓译,我
們?yōu)樗鼈兤鹆?個名字评肆。
之后就可以使?這個名字來替代這些語句
函數(shù)的使?可以省去重復代碼的編寫,??簡化程序非区,提
?開發(fā)效率瓜挽。
函數(shù)分類
從函數(shù)定義上來看,函數(shù)可分為:
庫函數(shù)(系統(tǒng)提供好的函數(shù)征绸,例如printf)
??定義函數(shù)(開發(fā)者??寫的函數(shù))
如何定義??的函數(shù)久橙?
?、函數(shù)的聲明和定義
函數(shù)的定義四要素
函數(shù)定義的四要素分別為:
返回值類型 :函數(shù)的結果值類型管怠,函數(shù)不能返回數(shù)組淆衷。
指定返回類型是─oid類型說明函數(shù)沒有返回值。
函數(shù)名 :函數(shù)名命名規(guī)范和變量名命名規(guī)范?樣渤弛。
參數(shù)列表 : 每個形式參數(shù)的前?說明其類型祝拯,即使?個
參數(shù)具有相同的數(shù)據(jù)類型,也必須對每個形式參數(shù)分別進
?類型說明她肯。形式參數(shù)?逗號進?分隔佳头,就算沒有參數(shù)函
數(shù)后?的()也不能省略,可以寫成(─oid)。
函數(shù)體 :函數(shù)功能的實現(xiàn)。
函數(shù)的定義形式
返回值類型 函數(shù)名(形式參數(shù)列表) {
void
int
char
float
..
語句
return 返回值;
}
?參數(shù)?返回值函數(shù)舉例
void hello(void) {
printf("Hello,Lanou"):
}
?參數(shù)有返回值函數(shù)舉例
int peopleCount(void) {
return 33;
}
有參數(shù)?返回值函數(shù)舉例
void printNumber(int x) {
printf("number is %d", x);
}
有參數(shù)有返回值函數(shù)舉例
int max(int a, int b) {
return a > b ? a : b;
}
返回值
1函數(shù)的返回值稱為函數(shù)的值甫窟,只能通過return語句返回給
主調函數(shù)。
2?個函數(shù)只能有?個返回值亭珍。
3函數(shù)即使沒有返回值也可以使?return來結束函數(shù)的執(zhí)
?敷钾,回到主調函數(shù)。
return后?的語句不再執(zhí)?肄梨。
函數(shù)聲明
嚴格的函數(shù)通常包括三部分:函數(shù)聲明阻荒、函數(shù)定義、以及函數(shù)調?众羡。
函數(shù)聲明:指的就是函數(shù)的描述财松,也叫函數(shù)原型。
? 函數(shù)聲明:
1纱控、函數(shù)定義出現(xiàn)在主調函數(shù)之前辆毡,可以省略函數(shù)聲明。
2甜害、函數(shù)定義出現(xiàn)在主調函數(shù)之后舶掖,需要提前聲明函數(shù)。
函數(shù)聲明盡管可以省略尔店,從規(guī)范來講眨攘,不要省略。
三嚣州、函數(shù)調?
1函數(shù)調?由函數(shù)名和跟隨其后的實際參數(shù)列表組成鲫售,其中
實際參數(shù)列表?()括起來。函數(shù)調?后邊始終跟著分號该肴,
即使沒有參數(shù)也要加上()情竹。
2函數(shù)的調?, 會產(chǎn)?程序的跳轉匀哄。
?參數(shù)?返回值函數(shù)調?舉例
int main(int argc, const
char * argv[]) {
//函數(shù)上?的語句 ? ??
hello();
//函數(shù)下?的語句
return 0;
}
(上面寫的和下面寫的是調用舉例)
─ void hello(─void) {
printf(“Hello,Lanou");
有參數(shù)有返回值函數(shù)調?舉例
int main(int argc, const
char * argv[]) {
//函數(shù)上?的語句
int ret = max(3, 5);
//函數(shù)下?的語句
return 0;
}
int max(int a, int b) {
return a > b ? a : b;
}
函數(shù)調?特殊說明
? 函數(shù)調?秦效,實參可為表達式
? 函數(shù)調?,返回值可以參與表達式運算
int main(int argc, const char *argv[]) {
//函數(shù)上?的語句
int a = 8;
int ret = max(3 + a, 5) + 10;
//函數(shù)下?的語句
return 0;
}
四涎嚼、形參實參
形參(形式參數(shù))
?出現(xiàn)在函數(shù)定義中阱州,以假名字來表?函數(shù)調?時需要提供
的值。作?范圍為整個函數(shù)范圍法梯。
?實參(實際參數(shù))
?出現(xiàn)在函數(shù)調?中的表達式苔货。
注意:函數(shù)調?中,形參會拷貝實參內容立哑,傳遞參數(shù)是給
函數(shù)傳送信息的?種?法夜惭。
函數(shù)聲明與定義的位置
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?頭?件(xxxx.h)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 函數(shù)聲明?般寫在頭?件?
源?件 ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?實現(xiàn)?件(xxxx.m)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 函數(shù)定義?般寫在實現(xiàn)?件?
函數(shù)嵌套調?
C語?不允許函數(shù)嵌套定義,但是允許函數(shù)嵌套調?刁憋。
? 函數(shù)嵌套定義 : 在?個函數(shù)定義內再去定義?個函數(shù)滥嘴;
? 函數(shù)嵌套調? : 在?個函數(shù)內去調?另?個函數(shù)木蹬。