?? codetc37.dat
字號:
函數(shù)的定義
無參函數(shù)的定義形式
{
聲明部分
語句
}
有參函數(shù)定義的一般形式
類型標識符 函數(shù)名(形式參數(shù)表列)
{
聲明部分
語句
}
例:
int max (int x,int y )
{int z; /*函數(shù)體中的聲明部分*/
z=x>y?x:y;
return(z);
}
這是一個求x和y二者中大者的函數(shù),第1行第一個關(guān)鍵字int表示函數(shù)值是整型的。max為函數(shù)名。括號中有兩個形式參數(shù)x和y,它們都是整 型 的。在調(diào)用此函數(shù)時,主調(diào)函數(shù)把實際參數(shù)的值傳遞給被調(diào)用的函數(shù)中的形式參數(shù)x和y。花括弧內(nèi)是函數(shù)體,這包括聲明部分和語句部分 。在聲明部分定義所用的變量,此外對將要調(diào)用的函數(shù)作聲明。在函數(shù)體的語句中求出z的值(為x與y中大者),return(z)的作用昌將z的值作 為函數(shù)值帶回到主調(diào)函數(shù)中。return后面的括弧中的值(z)作為函數(shù)帶回的值(或稱函數(shù)返回值)。在函數(shù)定義時已指定max函數(shù)為整型,在函數(shù) 體中定義z為整型,二者是一致的,將z作為函數(shù)max的值帶回調(diào)用函數(shù)
如果在定義函數(shù)時不指定函數(shù)類型,系統(tǒng)會隱含指定函數(shù)類型為int型。因此上面定義的max函數(shù)左端的int可以省寫。
可以有"空函數(shù)"
它的形式為
類型說明符 函數(shù)()
{}
例:
dummy(){}
調(diào)用此函數(shù)時,什么工作也不做,沒有任何實際作用。在主調(diào)函數(shù)中寫上"dummy.();"表明“這里要調(diào)用一個函數(shù)”,而瑞這個函數(shù)沒有 起作用,等以后擴充函數(shù)功能時補充上。在程序設(shè)計中往往根據(jù)需要確定若干模塊,分別由一些函數(shù)來實現(xiàn)。而在第一階段只設(shè)計最基本的模 塊,其他一些次要功能或錦上添花的功能則在以后需要時陸續(xù)補上。在編寫程序的開始階段,可以在將來準備擴充功能的地方寫上一個空函數(shù)
(函數(shù)名取將來采用的實際函數(shù)名(如用merge(),matproduct(),concatenate(),shell()等,分別代表合并,矩陣相乘,字符串連接,希爾法排 序等),只是這些函數(shù)未編好,先占一個位置,以后用一個編好的函數(shù)代替它。這樣做,程序的結(jié)構(gòu)清楚,右讀性好,以后擴充新功能方便, 對 程序結(jié)構(gòu)影響不大。空函數(shù)在程序設(shè)計中常常是有用的。
對形參的聲明的傳統(tǒng)方式
在老版本c語言中,對形參類型的聲明是放在函數(shù)定義的第2行,也就是不在第1行的括號內(nèi)指定形參的類型,而在括號外單獨指定,例如 上面定義的max函數(shù)可以寫成以下形式:
int max (x,y) /*指定形參x,y*/
int x,y; /*對形參指定類型*/
{int z;
z=x>y?x:y;
return(z);
}
一般把這種方式稱為傳統(tǒng)的對形參的聲明方式,而把前面介紹過的方法稱為現(xiàn)代的方式,Turbo C和目前使用的多數(shù)C版三對這兩種方法都 允許使用,兩種用溘等價,ANSI新標準推薦前一種方法,即現(xiàn)代方式,。它與PASCAL語言中所用的方法是類似的。本書中的程序采用新標準推 薦的現(xiàn)代方式。但由于有些過去寫的書籍和程序使用傳統(tǒng)方式,因此讀者應(yīng)對它有所了解,以便能方便地閱讀它們。
形式參數(shù)和實際參數(shù)
在調(diào)用函數(shù)時,大多數(shù)情況下,主調(diào)函數(shù)和被調(diào)用函數(shù)之間有數(shù)據(jù)傳遞關(guān)系。這就是前面提到的有參函數(shù)。前面已提到:在定義函數(shù)時函
數(shù)名后面括弧中的變量名稱為"形式參數(shù)"(簡"實參")。
例: 調(diào)用函數(shù)時的數(shù)據(jù)傳遞。
main()
{int a,b,c;
scanf("%d,%d"&a,&b);
c=max (a,b);
printf ("Max is %d",c);
}
max (int x,int y)
{
int z;
z=x>y?x:y;
return(z);
}
運行情況如下:
7,8
max is 8
程序中第7-12行是一個函數(shù)定義(注意第7行的末尾沒有分號)。第7行定義了一個函數(shù)名max和指定兩個形參x,y及其類型。程序第4行
是一個調(diào)用函數(shù)語句,max后面括弧內(nèi)的a,b是實參。a和b是main函數(shù)中定義的變量,x和y是函數(shù)max中的形式參數(shù)。通過函數(shù)調(diào)用,使兩個函 數(shù)中的數(shù)據(jù)發(fā)生聯(lián)系。
關(guān)于形參與實參的說明:
(1)在定義函數(shù)中指定的形參,在未出現(xiàn)函數(shù)調(diào)用時,它們并不占內(nèi)存中的存儲單元。只有在發(fā)生函數(shù)調(diào)用時,函數(shù)max中的形參才被分配 內(nèi)存單元。在調(diào)用結(jié)束后,形參所 占的內(nèi)存單元也被釋放。
(2)實參可以是常量,變量或表達式,如:
max(3,a+b);
但要求它們有確定的值。在調(diào)用時將實參的值賦給形參(如果形參數(shù)組名,則傳遞的是數(shù)組首地址而不是數(shù)組的值。)
(3)在被定義的函數(shù)中,必須指定形參的類型
(4)實參與形參的類型應(yīng)相同或賦值兼容。例中實參和形參都是整型,這是合法的,正確的。如果實參為整型而形參x為實型,或者相反, 則不同類型數(shù)值的賦值規(guī)則進行轉(zhuǎn) 換。例實參值a為3.5,而形參x為整型,則將實數(shù)3.5轉(zhuǎn)換成整數(shù)3,然后送到形參b。但此時應(yīng)將max函數(shù)放 在main函數(shù)的前面或在main函數(shù)中對被調(diào)用函數(shù)max作原型聲 明,否則會出錯。字符型與整型可以互相通用。
(5)C語言規(guī)定,實參變量對形參變量的數(shù)據(jù)傳遞是"值傳遞",即單向傳遞,只由實參傳給形參,而不能由形參傳回來給實參,這是和 FORTRAN不同的。在內(nèi)存中,實參單元與 形參單元是不同的單元。
在調(diào)用函數(shù)時,給形參分配存儲單元,并將實參對應(yīng)的值傳遞給形參,調(diào)用結(jié)束后,形參單元被釋放,實參單元仍保留并維持原值。因 此,在執(zhí)行一個被調(diào)用函數(shù)時,形參的值如果發(fā)生改變,并不會改變主調(diào)函數(shù)的實參的值。例如,若在執(zhí)行函數(shù)過程中x和y的值變?yōu)?0和15, 而a和b仍為2,3。
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -