1嵌洼、函數(shù)的本質(zhì)作用是實(shí)現(xiàn)代碼的復(fù)用和可讀性案疲。
2、函數(shù)中[ ]的三種作用:
①聲明變量時(shí)由[ ]麻养,表示聲明的變量時(shí)數(shù)組變量褐啡;
②函數(shù)參數(shù)由[ ],此時(shí)表示指針鳖昌;
③地址+[ ]备畦,表示下標(biāo)運(yùn)算。
3许昨、參數(shù)列表
不需要傳入?yún)?shù)懂盐,需要添加void,否則視為參數(shù)個(gè)數(shù)不確定糕档,寫了才表示不接受參數(shù)莉恼。
4、函數(shù)調(diào)用時(shí)如果只有函數(shù)名(比如Find)而沒有加上(),那么實(shí)際上是在使用函數(shù)所占空間的首地址俐银。另外尿背,對(duì)函數(shù)名Find取地址&Find和Find是等價(jià)的。
函數(shù)調(diào)用的本質(zhì)是:函數(shù)地址*(參數(shù)列表)捶惜,函數(shù)名就是函數(shù)地址
5田藐、函數(shù)聲明
主函數(shù)里調(diào)用的函數(shù),得在主函數(shù)之前就已經(jīng)定義和聲明吱七,另外函數(shù)是不能嵌套的汽久,只能在函數(shù)里調(diào)用其他函數(shù)。
函數(shù)聲明的形式:函數(shù)頭+陪捷;比如 void Plus(int a,int b);
作用:將函數(shù)聲明放在開頭后回窘,函數(shù)的定義順序不影響函數(shù)的調(diào)用,即使是當(dāng)前調(diào)用的函數(shù)也可以在代碼末尾編寫函數(shù)體和定義功能市袖。
注意點(diǎn):
①防止互相調(diào)用或者調(diào)用自己從而導(dǎo)致死循環(huán)啡直;
②函數(shù)聲明后一定要有函數(shù)定義(也就是實(shí)現(xiàn)功能的代碼段),否則無法調(diào)用苍碟;
③函數(shù)聲明可以有多個(gè)酒觅,但是定義只能有一個(gè)。
7微峰、return
return+一個(gè)參數(shù) ? ?用于一個(gè)有返回值的函數(shù)舷丹,作用是終止函數(shù)。
return蜓肆; ? 用于無返回值的函數(shù)颜凯,作用是終止函數(shù)。
return一次只能返回一個(gè)值仗扬,
return 4,5症概;的結(jié)果是返回了5,(a1,a2,a3....)這樣由“早芭,”隔開的多個(gè)參數(shù)構(gòu)成的逗號(hào)表達(dá)式彼城,最右端的參數(shù)有效。
但是return可以返回一個(gè)地址:
int *fun(void)
{
int *p=(int *)malloc(sizeof(int)*2);
*p=4;
p[1]=5; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //等價(jià)于*(p+1)=5
return p;
}
int *a=fun();
free(a);
a[0],a[1]可以訪問到返回的指針指向的兩個(gè)int型參數(shù)退个。
注:不能返回一個(gè)棧區(qū)的空間募壕,必須得用malloc申請(qǐng)堆區(qū)的局部地址空間。
因?yàn)闂^(qū)的作用域只在函數(shù)體內(nèi)语盈,函數(shù)調(diào)用結(jié)束時(shí)就會(huì)被釋放舱馅,函數(shù)體外調(diào)用從而獲得的返回值是非法訪問,屬于越界黎烈。