有參函數(shù)的一般形式
類型說明符 函數(shù)名(形式參數(shù)表)
型式參數(shù)類型說明
{
類型說明
語句
}
有參函數(shù)比無參函數(shù)多了兩個(gè)內(nèi)容,其一是形式參數(shù)表, 其二是形式參數(shù)類型說明。在形參表中給出的參數(shù)稱為
形式參數(shù), 它們可以是各種類型的變量, 各參數(shù)之間用逗號(hào)間隔。在進(jìn)行函數(shù)調(diào)用時(shí),主調(diào)函數(shù)將賦予這些形式參
數(shù)實(shí)際的值。 形參既然是變量,當(dāng)然必須給以類型說明。例如,定義一個(gè)函數(shù), 用于求兩個(gè)數(shù)中的大數(shù),可寫為:
int max(a,b)
int a,b;
{
if (a>b) return a;
else return b;
}
第一行說明 max函數(shù)是一個(gè)整型函數(shù),其返回的函數(shù)值是一個(gè)整數(shù)。形參為a,b。第二行說明 a,b均為整型量。 a,b
的具體值是由主調(diào)函數(shù)在調(diào)用時(shí)傳送過來的。在{}中的函數(shù)體內(nèi), 除形參外沒有使用其它變量,因此只有語句而沒有
變量類型說明。 上邊這種定義方法稱為“傳統(tǒng)格式”。 這種格式不易于編譯系統(tǒng)檢查,從而會(huì)引起一些非常細(xì)微而
且難于跟蹤的錯(cuò)誤。ANSI C 的新標(biāo)準(zhǔn)中把對(duì)形參的類型說明合并到形參表中,稱為“現(xiàn)代格式”。
例如 max函數(shù)用現(xiàn)代格式可定義為:
int max(int a,int b)
{
if(a>b) return a;
else return b;
}
現(xiàn)代格式在函數(shù)定義和函數(shù)說明(后面將要介紹)時(shí), 給出了形式參數(shù)及其類型,在編譯時(shí)易于對(duì)它們進(jìn)行查錯(cuò),
從而保證了函數(shù)說明和定義的一致性。例1.3即采用了這種現(xiàn)代格式。 在 max函數(shù)體中的return語句是把a(bǔ)(或b)
的值作為函數(shù)的值返回給主調(diào)函數(shù)。有返回值函數(shù)中至少應(yīng)有一個(gè)return語句。 在C程序中,一個(gè)函數(shù)的定義可以
放在任意位置,既可放在主函數(shù)main之前,也可放在main之后。例如例1.3中定義了一個(gè)max 函數(shù),其位置在main
之后, 也可以把它放在main之前。
修改后的程序如下所示。
int max(int a,int b)
{
if(a>b)return a;
else return b;
}
void main()
{
int max(int a,int b);
int x,y,z;
printf("input two numbers:\n");
scanf("%d%d",&x,&y);
z=max(x,y);
printf("maxmum=%d",z);
}
現(xiàn)在我們可以從函數(shù)定義、 函數(shù)說明及函數(shù)調(diào)用的角度來分析整個(gè)程序,從中進(jìn)一步了解函數(shù)的各種特點(diǎn)。程序
的第 1行至第 5行為 max函數(shù)定義。進(jìn)入主函數(shù)后,因?yàn)闇?zhǔn)備調(diào)用 max函數(shù),故先對(duì) max函數(shù)進(jìn)行說明(程序第8行)。
函數(shù)定義和函數(shù)說明并不是一回事,在后面還要專門討論。 可以看出函數(shù)說明與函數(shù)定義中的函數(shù)頭部分相同,但是
末尾要加分號(hào)。程序第12 行為調(diào)用 max函數(shù),并把x,y中的值傳送給 max的形參a,b。max函數(shù)執(zhí)行的
結(jié)果 (a或b)將返回給變量z。最后由主函數(shù)輸出 z的值。
函數(shù)調(diào)用的一般形式前面已經(jīng)說過,在程序中是通過對(duì)函數(shù)的調(diào)用來執(zhí)行函數(shù)體的,其過程與其它語言的子程序
調(diào)用相似。C語言中, 函數(shù)調(diào)用的一般形式為:
函數(shù)名(實(shí)際參數(shù)表) 對(duì)無參函數(shù)調(diào)用時(shí)則無實(shí)際參數(shù)表。 實(shí)際參數(shù)表中的參數(shù)可以是常數(shù),變量或其它構(gòu)造類
型數(shù)據(jù)及表達(dá)式。 各實(shí)參之間用逗號(hào)分隔。'Next of Page在C語言中,可以用以下幾種方式調(diào)用函數(shù):
1.函數(shù)表達(dá)式
函數(shù)作表達(dá)式中的一項(xiàng)出現(xiàn)在表達(dá)式中,以函數(shù)返回值參與表達(dá)式的運(yùn)算。這種方式要求函數(shù)是有返回值的。例
如: z=max(x,y)是一個(gè)賦值表達(dá)式,把 max的返回值賦予變量z。'Next of Page
2.函數(shù)語句
函數(shù)調(diào)用的一般形式加上分號(hào)即構(gòu)成函數(shù)語句。例如: printf ("%D",a);scanf ("%d",&b);都是以函數(shù)語句的方
式調(diào)用函數(shù)。
3.函數(shù)實(shí)參
函數(shù)作為另一個(gè)函數(shù)調(diào)用的實(shí)際參數(shù)出現(xiàn)。 這種情況是把該函數(shù)的返回值作為實(shí)參進(jìn)行傳送,因此要求該函數(shù)必
須是有返回值的。例如: printf("%d",max(x,y)); 即是把 max調(diào)用的返回值又作為 printf函數(shù)的實(shí)參來使用的。在
函數(shù)調(diào)用中還應(yīng)該注意的一個(gè)問題是求值順序的問題。 所謂求值順序是指對(duì)實(shí)參表中各量是自左至右使用呢,還是自
右至左使用。 對(duì)此, 各系統(tǒng)的規(guī)定不一定相同。在 3.1.3節(jié)介紹 printf 函數(shù)時(shí)已提
到過,這里從函數(shù)調(diào)用的角度再強(qiáng)調(diào)一下。 看例 5.2程序。
void main()
{
int i=8;
printf("%d\n%d\n%d\n%d\n",++i,--i,i++,i--);
}
如按照從右至左的順序求值。例 5.2的運(yùn)行結(jié)果應(yīng)為:
8
7
7
8
如對(duì) printf語句中的++i,--i,i++,i--從左至右求值,結(jié)果應(yīng)為:
9
8
8
9
應(yīng)特別注意的是,無論是從左至右求值, 還是自右至左求值,其輸出順序都是不變的, 即輸出順序總是和實(shí)參
表中實(shí)參的順序相同。由于 Turbo C現(xiàn)定是自右至左求值,所以結(jié)果為8,7,7,8。上述問題如還不理解,上機(jī)一試
就明白了。函數(shù)的參數(shù)和函數(shù)的值
2015年全國職稱計(jì)算機(jī)考試教材(2007模 .. 定價(jià):¥225 優(yōu)惠價(jià):¥213 更多書籍 | |
全國職稱計(jì)算機(jī)考試速成過關(guān)系列套裝:W .. 定價(jià):¥133 優(yōu)惠價(jià):¥133.0 更多書籍 |