形式參數(shù)就是定義函數(shù)時候的參數(shù)表,只是定義了調(diào)用時參數(shù)的個數(shù)、類型和用來引用的名字,并沒有具體的內(nèi)容。形參未被調(diào)用時,不占存儲單元。形參只在調(diào)用過程中占用存儲單元。
創(chuàng)新互聯(lián)建站是由多位在大型網(wǎng)絡(luò)公司、廣告設(shè)計公司的優(yōu)秀設(shè)計人員和策劃人員組成的一個具有豐富經(jīng)驗的團(tuán)隊,其中包括網(wǎng)站策劃、網(wǎng)頁美工、網(wǎng)站程序員、網(wǎng)頁設(shè)計師、平面廣告設(shè)計師、網(wǎng)絡(luò)營銷人員及形象策劃。承接:成都做網(wǎng)站、成都網(wǎng)站設(shè)計、網(wǎng)站改版、網(wǎng)頁設(shè)計制作、網(wǎng)站建設(shè)與維護(hù)、網(wǎng)絡(luò)推廣、數(shù)據(jù)庫開發(fā),以高性價比制作企業(yè)網(wǎng)站、行業(yè)門戶平臺等全方位的服務(wù)。
在調(diào)用函數(shù)時,給形參分配存儲單元,實參可以是常量、變量或者表達(dá)式,且要與形參類型一致!而且實參要有確定的值,在調(diào)用過程中實參將值賦給形參,并將實際參數(shù)對應(yīng)的數(shù)值傳遞給形式參數(shù);
調(diào)用結(jié)束后,形參單元被釋放,實參單元仍然保留
并且維持原值。所以說,實參是調(diào)用函數(shù)傳遞的具體數(shù)據(jù)。實參對形參數(shù)據(jù)傳遞時時單向傳遞。在存儲單元中是不同的單元。
下面這段程序中
#includestdio.h
int
fun(int
a,int
b)
{a+=10;
b=a+b*2;
return
a+b;
}
void
main()
{
int
x=3,y=5,z;
z=fun(x,y);
printf("%d
%d
%d\n",x,y,z);
}
a和b都是形式參數(shù),x和y都是實際參數(shù)。
程序從主函數(shù)開始運行,等到運行到z=fun(x,y)開始調(diào)用被調(diào)用函數(shù),以被調(diào)用函數(shù)的形式進(jìn)行運算,然后把計算的值返回后賦值給z,這樣一個運算就算完成了。在調(diào)用過程中,形參a和b的值都發(fā)生了改變,但是在main函數(shù)中,x和y的值都未發(fā)生變化。所以說實參向形參的值的傳遞是單向的。
函數(shù)聲明時只需寫出形參類型。
函數(shù)定義時必須寫出形參類型和變量名。
C語言中的標(biāo)準(zhǔn)函數(shù)printf便使用這種機(jī)制。在聲明不確定形參的函數(shù)時,形參部分可以使用省略號“…”代替?!啊备嬖V編譯器,在函數(shù)調(diào)用時不檢查形參類型是否與實參類型相同,也不檢查參數(shù)個數(shù)。
擴(kuò)展資料
示例
例如:
void ConnectData(int i,...)
在上面的代碼中,編譯器只檢查第一個參數(shù)是否為整型,而不對其他參數(shù)進(jìn)行檢查。
對于可變參數(shù)的函數(shù),需要進(jìn)行特殊的處理。首先需要引用 stdarg.h 頭文件,然后利用va_list類型和va_start、va_arg、va_end 3個宏讀取傳遞到函數(shù)中的參數(shù)值。
這幾個宏的定義如下(在 ANSI C 中):
type va_arg( va_list arg_ptr, type );
void va_end( va_list arg_ptr );
void va_start( va_list arg_ptr, prev_param )。
形參:全稱為"形式參數(shù)"是在定義函數(shù)名和函數(shù)體的時候使用的參數(shù),目的是用來接收調(diào)用該函數(shù)時傳如的參數(shù).
實參:全稱為"實際參數(shù)"是在調(diào)用時傳遞個該函數(shù)的參數(shù).
形參和實參的類型必須要一致,或者要符合隱含轉(zhuǎn)換規(guī)則,
當(dāng)形參和實參不是指針類型時,在該函數(shù)運行時,形參和實
參是不同的變量,他們在內(nèi)存中位于不同的位置,形參將實
參的內(nèi)容復(fù)制一份,在該函數(shù)運行結(jié)束的時候形參被釋放,
而實參內(nèi)容不會改變.
而如果函數(shù)的參數(shù)是指針類型變量,在調(diào)用該函數(shù)的過程
中,傳個函數(shù)的是實參的地址,在函數(shù)體內(nèi)部使用的也是
實參的地址,即使用的就是實參本身.所以在函數(shù)體內(nèi)部
可以改變實參的值.
給你一個很簡單的例子:
int f(int b) /*b為形參*/
{ return b;}
main()
{
int a=1;
printf("%d",f(a));/*a為實參*/
}