淺談C語(yǔ)言函數(shù)
導(dǎo)語(yǔ):C語(yǔ)言程序設(shè)計(jì)是結(jié)構(gòu)化程序設(shè)計(jì),函數(shù)是C語(yǔ)言的基本模塊,函數(shù)調(diào)用是C語(yǔ)言運(yùn)行的重要機(jī)制,在C語(yǔ)言中除了提供大量的庫(kù)函數(shù)外,要實(shí)現(xiàn)具體的功能必須自己定義函數(shù),下面就由小編為大家淺談一下C語(yǔ)言函數(shù),歡迎大家閱讀!
1 函數(shù)的定義
所謂函數(shù)定義,即定義函數(shù)功能,如求和,求最值,排序功能,用C語(yǔ)言提供的選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu)寫出具體的代碼實(shí)現(xiàn)。如果函數(shù)只是完成某項(xiàng)特定的處理任務(wù)可以定義無(wú)返回值的函數(shù),如果函數(shù)最后要返回結(jié)果,可以定義的返回值的函數(shù),如下兩段代碼左邊有返回值,右邊沒有返回值。
int sum1(int m)//函數(shù)頭部
{ int i,sum=0;
for(i=1;i<=m;i++)
sum=sum+i;
return sum; }
void sum2(int m)//函數(shù)頭部
{ int i,sum=0;
for(i=1;i<=m;i++)
sum=sum+i;
}
s=sum;
}
2 函數(shù)的調(diào)用
函數(shù)調(diào)用的一般形式為:
函數(shù)名(實(shí)參列表);
實(shí)參可以是常數(shù)、變量、表達(dá)式等,多個(gè)實(shí)參用逗號(hào),分隔。
在C語(yǔ)言中,函數(shù)調(diào)用的方式有多種,例如:
01.// 函數(shù)作為表達(dá)式中的一項(xiàng)出現(xiàn)在表達(dá)式中
02.z = max(x, y);
03.m = n + max(x, y);
04.// 函數(shù)作為一個(gè)單獨(dú)的語(yǔ)句
05.printf("%d", a);
06.scanf("%d", &b);
07.// 函數(shù)作為調(diào)用另一個(gè)函數(shù)時(shí)的實(shí)參
08.printf( "%d", max(x, y) );
09.total( max(x, y), min(m, n) );
在函數(shù)調(diào)用中還應(yīng)該注意的一個(gè)問(wèn)題是求值順序的問(wèn)題。所謂求值順序是指對(duì)實(shí)參列表中各個(gè)參數(shù)是自左向右使用呢,還是自右向左使用。對(duì)此,各系統(tǒng)的規(guī)定不一定相同。
3 實(shí)際參數(shù)和形式參數(shù)
在函數(shù)定義時(shí)出現(xiàn)函數(shù)名后邊括號(hào)里的變量就是形參,形參必須是變量,因?yàn)樵诤瘮?shù)調(diào)用時(shí)形參是被賦值對(duì)象,形參只在定義它的函數(shù)內(nèi)部被訪問(wèn),是局部變量。
在函數(shù)調(diào)用時(shí)出現(xiàn)在函數(shù)名后邊括號(hào)里的常量、變量、表達(dá)式、函數(shù)等是實(shí)參,實(shí)參當(dāng)前值是確定的,因?yàn)樗谫x號(hào)右側(cè)。
實(shí)參出現(xiàn)在主調(diào)函數(shù)中,形參出現(xiàn)在被調(diào)函數(shù)中。
4 傳值調(diào)用和傳址調(diào)用
4.1兩個(gè)數(shù)對(duì)調(diào)的函數(shù)實(shí)現(xiàn)
#include
int a=3,b=4;
void swap1(int a,int b){//值傳遞,也稱為單向傳遞
int t;
t=a;a=b;b=t;
}
void swap2(int *a,int *b){//地址傳遞,也稱為“雙向傳遞”,實(shí)質(zhì)還是單向傳遞
int t;
t=*a;*a=*b;*b=t;
}
main(){
swap1(a,b);
printf("a=%d,b=%d ",a,b);
swap2(&a,&b);
printf("a=%d,b=%d ",a,b);
}
第一個(gè)輸出結(jié)果為3,4,第二個(gè)輸出結(jié)果為4,3,在這里傳值調(diào)用和傳址調(diào)用正確,多數(shù)教材和資料中談到傳址調(diào)用時(shí)介紹是雙向傳遞,應(yīng)該是不正確的,以下面例子為例:
4.2有下列程序
# include
void fun1(int x,int y)
{ int z;
z=x; x=y; y=z;
}
void fun2(int *x,int *y)
{ int z;
z=*x; *x=*y; *y=z;
(*x)++; (*y)++;
}
void fun3(int *x,int *y)
{ int z;
z=*x; *x=*y; *y=z;
(*x)++; (*y)++;
}
void main()
{ int a=5,b=9;
fun1(a,b);
printf("a=%d,b=%d ",a,b);
fun2(&a,&b);
printf("a=%d,b=%d ",a,b);
fun3(&a,&b); printf("a=%d,b=%d ",a,b);
}
在這個(gè)程序中有三次函數(shù)調(diào)用,第一次調(diào)用結(jié)果還第三次調(diào)用都沒有改變主調(diào)函數(shù)中變量的值第二次改變了,第一次是傳值調(diào)用,第二、三次是傳址調(diào)用,第二次改變的實(shí)質(zhì)不是因?yàn)槭莻髦氛{(diào)用,而是因?yàn)槭褂昧碎g接訪問(wèn)。
5 C語(yǔ)言程序設(shè)計(jì)函數(shù)使用方法
5.1函數(shù)是C模塊語(yǔ)言的模塊
C語(yǔ)言的基本框架是函數(shù),函數(shù)是C語(yǔ)言的基本模塊,在理解中列舉生活中的例子,例如一個(gè)部門一開始很小,只有一個(gè)人,相當(dāng)只有一個(gè)主函數(shù),慢慢的部門壯大起來(lái),需要的人數(shù)增多,這時(shí)候部門就可以再進(jìn)一個(gè)人,那必然有一個(gè)領(lǐng)導(dǎo)另一個(gè),領(lǐng)導(dǎo)者就是先來(lái)的人,也就是主函數(shù),被領(lǐng)導(dǎo)者是后來(lái)的人,即被調(diào)用函數(shù),主函數(shù)安排任務(wù)給被調(diào)函數(shù),要把任務(wù)內(nèi)容告訴被調(diào)用函數(shù),這變是參數(shù)傳遞。
5.2函數(shù)代碼定義過(guò)程
定義時(shí)先定義被調(diào)用函數(shù),然后再定義主函數(shù),這樣在主函數(shù)中就不用做函數(shù)聲明了。
定義被調(diào)用函數(shù)時(shí),先把函數(shù)名字及圓括號(hào)和大括號(hào)寫,里面的代碼先不寫。然后寫主函數(shù)定義,主函數(shù)在這里沒有返回值也無(wú)參,主函數(shù)的頭部定義沒有問(wèn)題,然后先寫主函數(shù)體代碼,通常主函數(shù)分三部分, 輸入、調(diào)用和輸出,這三部分相對(duì)比較難的是調(diào)用,調(diào)用時(shí)要分析有沒有返回值,有沒有參數(shù),如果有參數(shù),有幾個(gè)并且參數(shù)的類型要確定,調(diào)用時(shí)的參數(shù)是實(shí)際參數(shù),根據(jù)實(shí)參和形參的一一對(duì)應(yīng)關(guān)系,實(shí)參確定好了,形參的類型和個(gè)數(shù)自然也就確定了,這樣被調(diào)用函數(shù)的頭部就定義好了。
主函數(shù)定義后,被調(diào)用函數(shù)的頭部也定義好了,這時(shí)候開始寫被調(diào)用函數(shù)的函數(shù)體,也是編寫程序最難的一部分,涉及具體的算法。
把主函數(shù)和被調(diào)用函數(shù)定義好后,在具體開發(fā)環(huán)境下編譯、鏈接、執(zhí)行,找出程序有沒有語(yǔ)法錯(cuò)誤和邏輯錯(cuò)誤,最后程序得出正確的結(jié)果。
6 結(jié)語(yǔ)
C語(yǔ)言程序設(shè)計(jì)函數(shù)部分是學(xué)習(xí)難點(diǎn),它把以前學(xué)的一個(gè)函數(shù)能實(shí)現(xiàn)的功能分在兩個(gè)或多個(gè)函數(shù)中實(shí)現(xiàn),并且多個(gè)函數(shù)這間有接口,接口就是函數(shù)調(diào)用時(shí)的參數(shù)傳遞,參數(shù)傳遞時(shí)又涉及到變量的作用域和生存期,函數(shù)部分把C語(yǔ)言的各個(gè)知識(shí)點(diǎn)都聯(lián)接起來(lái)了,是C語(yǔ)言的集成和綜合,所以學(xué)好函數(shù)是學(xué)好C語(yǔ)言的關(guān)鍵。
【淺談C語(yǔ)言函數(shù)】相關(guān)文章:
淺談如何運(yùn)用C語(yǔ)言malloc和free函數(shù)08-09
什么是C語(yǔ)言函數(shù)09-26
C語(yǔ)言函數(shù)的定義07-13
C語(yǔ)言函數(shù)的遞歸調(diào)用08-26
關(guān)于C語(yǔ)言對(duì)函數(shù)06-14
C語(yǔ)言常用的轉(zhuǎn)出函數(shù)08-18
C語(yǔ)言函數(shù)遞歸教程09-25
C語(yǔ)言常用的輸入函數(shù)10-22