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