假設(shè)主函數(shù)main()。其他函數(shù)void fun(int a,int *b)。
創(chuàng)新互聯(lián)公司-專(zhuān)業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比臨西網(wǎng)站開(kāi)發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫(kù),直接使用。一站式臨西網(wǎng)站制作公司更省心,省錢(qián),快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋臨西地區(qū)。費(fèi)用合理售后完善,十載實(shí)體公司更值得信賴。
關(guān)于函數(shù)定義和聲明:
在代碼中fun函數(shù),有完整函數(shù)體的代碼就是函數(shù)定義部分,比如void fun(int a,int *b){。。。};。
如果沒(méi)有具體實(shí)現(xiàn)的函數(shù)體代碼(也就是大括號(hào)內(nèi)容),那么就是函數(shù)聲明。比如void fun(int ,int *);
關(guān)于函數(shù)聲明和調(diào)用:
如果fun函數(shù)定義在main代碼上面。比如:
void fun(int a,int *b){。。。};
int main(){
int a=0,int b=0;
......
fun(a,b);//這里fun定義代碼在main上面,所以可以不需要聲明。反之需要先寫(xiě)聲明語(yǔ)句
return 0;
}
關(guān)于函數(shù)局部變量及全局變量:
簡(jiǎn)單區(qū)分:
定義在函數(shù)之外的就是全局變量,這個(gè)變量所有函數(shù)都可以直接使用,并且共用同一個(gè)地址。任意函數(shù)修改了變量值,其他函數(shù)調(diào)用也會(huì)變。
定義在函數(shù)之內(nèi)的就是局部變量,局部變量只屬于該函數(shù),其他函數(shù)即使定義了同樣名字的變量,這兩個(gè)變量也不同地址,互不相干。
比如:
int a;//這就是全局變量,作用域下所有函數(shù)共用
int main()
{
int b;//這就是局部變量,只在本函數(shù)有效,如果想在調(diào)用fun函數(shù)時(shí)讓fun也使用該變量,需要把這個(gè)變量的地址作為參數(shù)傳遞過(guò)去。
printf("%d",b);
return 0;
}
注意:c語(yǔ)言中允許局部變量和全局變量同名,但是同名的局部變量會(huì)屏蔽全局變量,實(shí)際代碼避免同名。
關(guān)于函數(shù)傳值和傳址:
如函數(shù)void fun(int a,int *b){..........};這里形參a 和*b,分別表示一個(gè)值和一個(gè)地址
所以在調(diào)用該函數(shù)時(shí),比如:
int main()
{
int c,d;
fun(c,d);//這里調(diào)用就對(duì)應(yīng)上面形參類(lèi)型,第一個(gè)參數(shù)傳遞了c的值(傳值),第二個(gè)參數(shù)傳遞了d的地址(傳址),這里c和d,叫做實(shí)參。當(dāng)fun函數(shù)運(yùn)行時(shí)改變了a和b指向地址的值,對(duì)應(yīng)main函數(shù)中c的值不變,d的值改變。
return 0;
}
順帶一說(shuō):局部變量,在函數(shù)運(yùn)行結(jié)束后會(huì)自動(dòng)釋放,所以想把局部變量地址作為返回值,需要用malloc函數(shù)申請(qǐng)。(這里看不懂可以暫時(shí)忽視)
C語(yǔ)言中,函數(shù)調(diào)用的一般形式為:
函數(shù)名(實(shí)際參數(shù)表)
對(duì)無(wú)參函數(shù)調(diào)用時(shí)則無(wú)實(shí)際參數(shù)表。實(shí)際參數(shù)表中的參數(shù)可以是常數(shù)、變量或其它構(gòu)造類(lèi)型數(shù)據(jù)及表達(dá)式。各實(shí)參之間用逗號(hào)分隔。
#includestdio.h
int?fun(int?x,?int?y);?//?函數(shù)聲明,如果函數(shù)寫(xiě)在被調(diào)用處之前,可以不用聲明
void?main()
{
int?a=1,?b=2,?c;
c?=?fun(a,?b);?//?函數(shù)的調(diào)用,調(diào)用自定義函數(shù)fun,其中a,b為實(shí)際參數(shù),傳遞給被調(diào)用函數(shù)的輸入值
}
//?自定義函數(shù)fun
int?fun(int?x,?int?y)??//?函數(shù)首部
{??//?{}中的語(yǔ)言為函數(shù)體
return?xy???x?:?y;??//?返回x和y中較大的一個(gè)數(shù)
}
擴(kuò)展資料
C語(yǔ)言中不允許作嵌套的函數(shù)定義。因此各函數(shù)之間是平行的,不存在上一級(jí)函數(shù)和下一級(jí)函數(shù)的問(wèn)題。但是C語(yǔ)言允許在一個(gè)函數(shù)的定義中出現(xiàn)對(duì)另一個(gè)函數(shù)的調(diào)用。
這樣就出現(xiàn)了函數(shù)的嵌套調(diào)用。即在被調(diào)函數(shù)中又調(diào)用其它函數(shù)。這與其它語(yǔ)言的子程序嵌套的情形是類(lèi)似的。其關(guān)系可表示如圖。
圖表示了兩層嵌套的情形。其執(zhí)行過(guò)程是:執(zhí)行main函數(shù)中調(diào)用a函數(shù)的語(yǔ)句時(shí),即轉(zhuǎn)去執(zhí)行a函數(shù),在a函數(shù)中調(diào)用b 函數(shù)時(shí),又轉(zhuǎn)去執(zhí)行b函數(shù),b函數(shù)執(zhí)行完畢返回a函數(shù)的斷點(diǎn)繼續(xù)執(zhí)行,a函數(shù)執(zhí)行完畢返回main函數(shù)的斷點(diǎn)繼續(xù)執(zhí)行。
參考資料:函數(shù)調(diào)用_百度百科
1、值傳遞,創(chuàng)建變量x和y,x的值等于a的值,y的值等于b的值
void Exchg1(int x, int y)?
{
int tmp;
tmp=x;
x=y;
y=tmp;
printf(“x=%d,y=%d/n”,x,y)
}
void main()
{
int a=4,b=6;
Exchg1 (a,b) ;
printf(“a=%d,b=%d/n”,a,b)
}
2、地址傳遞,相當(dāng)于建立了px和py兩個(gè)指向整型的指針,其值分別為a和b的地址
Exchg2(int *px, int *py)
{
int tmp=*px;
*px=*py;
*py=tmp;
print(“*px=%d,*py=%d/n”,*px,*py);
}
main()
{
int a=4;
int b=6;
Exchg2(a,b);
Print(“a=%d,b=%d/n”, a, b);
}
3、引用傳遞,x和y直接引用a和b,對(duì)a和b操作,相當(dāng)于給a、b起了別名x、y
Exchg2(int x, int y)
{
int tmp=x;
x=y;
y=tmp;
print(“x=%d,y=%d/n”,x,y);
}
main()
{
int a=4;
int b=6;
Exchg2(a,b);
Print(“a=%d,b=%d/n”, a, b);
}
擴(kuò)展資料:
printf用法:
printf()函數(shù)的調(diào)用格式為:printf("lt;格式化字符串gt;",lt;參量表gt;)。
其中格式化字符串包括兩部分內(nèi)容:一部分是正常字符,這些字符將按原樣輸出;另一部分是格式化規(guī)定字符,以"%"開(kāi)始,后跟一個(gè)或幾個(gè)規(guī)定字符,用來(lái)確定輸出內(nèi)容格式。
參量表是需要輸出的一系列參數(shù),其個(gè)數(shù)必須與格式化字符串所說(shuō)明的輸出參數(shù)個(gè)數(shù)一樣多,各參數(shù)之間用","分開(kāi),且順序一一對(duì)應(yīng),否則將會(huì)出現(xiàn)意想不到的錯(cuò)誤。
比如:
int a=1234;
printf("a=%d\n",a);
輸出結(jié)果為a=1234。
C語(yǔ)言函數(shù)的運(yùn)用及調(diào)用
1.當(dāng)程序變得越來(lái)越復(fù)雜的時(shí)候,我們可以使用函數(shù)進(jìn)行完成任務(wù),并不再是進(jìn)行編寫(xiě)。
2.C語(yǔ)言本身就具有豐富的庫(kù)函數(shù):
目錄路徑函數(shù)
字符類(lèi)型分類(lèi)函數(shù)
內(nèi)存管理函數(shù)
數(shù)學(xué)函數(shù)
進(jìn)程控制函數(shù)
日期和時(shí)間函數(shù)
接口函數(shù)
輸入輸出函數(shù)
圖形函數(shù)
診斷函數(shù)
3.每一種函數(shù)都有它的作用,在需要使用時(shí),直接進(jìn)行調(diào)用就可以了。
4.函數(shù)分為有參和無(wú)參函數(shù)。
參數(shù)可以分為形參與實(shí)參。
形參在函數(shù)內(nèi),而實(shí)參在函數(shù)外。
形參直接使用,而實(shí)參在函數(shù)外調(diào)用。
5. 函數(shù)的值只能通過(guò)return語(yǔ)句返回主調(diào)函數(shù)。
6.在函數(shù)內(nèi)有局部變量和全局變量?jī)煞N,局部變量在函數(shù)內(nèi)使用,而全局變量可在函數(shù)中使用。
7.從變量作用域可以劃分全局,而在變量的生存期可以分為靜態(tài)與動(dòng)態(tài)存儲(chǔ)方式。
固定的存儲(chǔ)空間與運(yùn)行時(shí)分配的存儲(chǔ)空間方式還是有所不同的。
auto聲明自動(dòng)變量,自動(dòng)變量用關(guān)鍵字作存儲(chǔ)類(lèi)別的聲明,在函數(shù)調(diào)用結(jié)束將會(huì)自動(dòng)釋放這些存儲(chǔ)空間。
static可以聲明局部變量,在函數(shù)調(diào)用結(jié)束之后不消失而保留原值。
8.register可以聲明局部變量,在函數(shù)調(diào)用時(shí)為了提高效率,可以寄存在CPU的寄存器中。
extern可以聲明局部變量,擴(kuò)展程序文件中的作用域。