形式參數(shù)和實(shí)際參數(shù)
創(chuàng)新互聯(lián)主要從事做網(wǎng)站、網(wǎng)站制作、網(wǎng)頁(yè)設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)北川羌族,10年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專業(yè),歡迎來(lái)電咨詢建站服務(wù):13518219792
函數(shù)的參數(shù)分為形參和實(shí)參兩種。在本小節(jié)中,進(jìn)一步介紹形參、實(shí)參的特點(diǎn)和兩者的關(guān)系。形參出現(xiàn)在函數(shù)定義中,在整個(gè)函數(shù)體內(nèi)都可以使用,離開該函數(shù)則不能使用。實(shí)參出現(xiàn)在主調(diào)函數(shù)中,進(jìn)入被調(diào)函數(shù)后,實(shí)參變量也不能使用。形參和實(shí)參的功能是作數(shù)據(jù)傳送。發(fā)生函數(shù)調(diào)用時(shí),主調(diào)函數(shù)把實(shí)參的值傳送給被調(diào)函數(shù)的形參從而實(shí)現(xiàn)主調(diào)函數(shù)向被調(diào)函數(shù)的數(shù)據(jù)傳送。
函數(shù)的形參和實(shí)參具有以下特點(diǎn):
1.
形參變量只有在被調(diào)用時(shí)才分配內(nèi)存單元,在調(diào)用結(jié)束時(shí),即刻釋放所分配的內(nèi)存單元。因此,形參只有在函數(shù)內(nèi)部有效。函數(shù)調(diào)用結(jié)束返回主調(diào)函數(shù)后則不能再使用該形參變量。
2.
實(shí)參可以是常量、變量、表達(dá)式、函數(shù)等,無(wú)論實(shí)參是何種類型的量,在進(jìn)行函數(shù)調(diào)用時(shí),它們都必須具有確定的值,以便把這些值傳送給形參。因此應(yīng)預(yù)先用賦值,輸入等辦法使實(shí)參獲得確定值。
3.
實(shí)參和形參在數(shù)量上,類型上,順序上應(yīng)嚴(yán)格一致,否則會(huì)發(fā)生類型不匹配”的錯(cuò)誤。
4.
函數(shù)調(diào)用中發(fā)生的數(shù)據(jù)傳送是單向的。即只能把實(shí)參的值傳送給形參,而不能把形參的值反向地傳送給實(shí)參。
因此在函數(shù)調(diào)用過(guò)程中,形參的值發(fā)生改變,而實(shí)參中的值不會(huì)變化。
【例】可以說(shuō)明這個(gè)問(wèn)題。
main()
{
int
n;
printf("input
number\n");
scanf("%d",n);
s(n);
printf("n=%d\n",n);
}
int
s(int
n)
{
int
i;
for(i=n-1;i=1;i--)
n=n+i;
printf("n=%d\n",n);
}
本程序中定義了一個(gè)函數(shù)s,該函數(shù)的功能是求∑ni的值。在主函數(shù)中輸入n值,并作為實(shí)參,在調(diào)用時(shí)傳送給s
函數(shù)的形參量n(
注意,本例的形參變量和實(shí)參變量的標(biāo)識(shí)符都為n,但這是兩個(gè)不同的量,各自的作用域不同)。在主函數(shù)中用printf
語(yǔ)句輸出一次n值,這個(gè)n值是實(shí)參n的值。在函數(shù)s中也用printf
語(yǔ)句輸出了一次n值,這個(gè)n值是形參最后取得的n值0。從運(yùn)行情況看,輸入n值為100。即實(shí)參n的值為100。把此值傳給函數(shù)s時(shí),形參n的初值也為100,在執(zhí)行函數(shù)過(guò)程中,形參n的值變?yōu)?050。返回主函數(shù)之后,輸出實(shí)參n的值仍為100??梢妼?shí)參的值不隨形參的變化而變化。/*---------------------------------------------------------------------------------*/
形參和實(shí)參擁有分別的存儲(chǔ)空間,即便是指針傳遞,改變的也只可能是這個(gè)指針變量所指向的內(nèi)容,而不是指針變量本身的值,也即,如有指針變量p,那對(duì)實(shí)參的變化,有可能改變的也只是*p的值,而不是p本身的值。
函數(shù)只有兩種傳遞方式:
1、值傳遞,又稱單向傳遞,只能把實(shí)參數(shù)值傳給形參 ,形參最后的結(jié)果不影響實(shí)參(形參改變大小 ,實(shí)參大小不變)。
2、址傳遞,通過(guò)指針,把實(shí)參的地址給形參,形參的大小可以影響實(shí)參。
擴(kuò)展資料:
實(shí)參變量和形參變量之間的調(diào)用過(guò)程
1、函數(shù)的形參列于函數(shù)聲明中,在函數(shù)定義的函數(shù)體內(nèi)使用,在未出現(xiàn)函數(shù)調(diào)用時(shí),形參不占內(nèi)存中的存儲(chǔ)單元。
2、將實(shí)參的值傳遞給形參,當(dāng)函數(shù)被調(diào)用時(shí),實(shí)參列在函數(shù)名后面的括號(hào)里,執(zhí)行函數(shù)調(diào)用時(shí),實(shí)參被傳遞給形參。
3、在執(zhí)行函數(shù)期間,由于形參已經(jīng)有值,可以利用其進(jìn)行相關(guān)運(yùn)算。
4、通過(guò)return語(yǔ)句將函數(shù)值帶回到主調(diào)函數(shù)。
5、調(diào)用結(jié)束,形參單元被釋放。實(shí)參單元仍保留并維持原值(值傳遞)。
參考資料來(lái)源:百度百科-實(shí)際參數(shù)
函數(shù)調(diào)用可以作為一個(gè)函數(shù)的實(shí)參,但是不能作為一個(gè)函數(shù)的形參,因?yàn)榉祷刂凳莾?chǔ)存在寄存器中的,而在C語(yǔ)言中寄存器是8位的,8位寄存器只能儲(chǔ)存數(shù)據(jù)而不能儲(chǔ)存地址,沒(méi)有地址自然不能作為形參了