參數(shù)傳遞,是在程序運(yùn)行過程中,實(shí)際參數(shù)就會將參數(shù)值傳遞給相應(yīng)的形式參數(shù),然后在函數(shù)中實(shí)現(xiàn)對數(shù)據(jù)處理和返回的過程,方法有按值傳遞參數(shù),按地址傳遞參數(shù)和按數(shù)組傳遞參數(shù)。
形參:指出現(xiàn)在Sub 和Function過程形參表中的變量名、數(shù)組名,該過程在被調(diào)用前,沒有為它們分配內(nèi)存,其作用是說明自變量的類型和形態(tài)以及在過程中的作用。形參可以是除定長字符串變量之外的合法變量名,也可以帶括號的數(shù)組名。
實(shí)參:實(shí)參就是在調(diào)用Sub 和Function過程時(shí),從主調(diào)過程傳遞給被調(diào)用過程的參數(shù)值。實(shí)參可以是變量名、數(shù)組名、常數(shù)或表達(dá)式。在過程調(diào)用傳遞參數(shù)時(shí),形參與實(shí)參是按位置結(jié)合的,形參表和實(shí)參表中對應(yīng)的變量名可以不必相同,但它們的數(shù)據(jù)類型、參數(shù)個(gè)數(shù)及位置必須一一對應(yīng)。
等號、函數(shù)名稱、括弧和參數(shù),是函數(shù)的四個(gè)組成部分。
函數(shù)“=SUM(1,2,3)”,1、2和3就是SUM函數(shù)的參數(shù),沒有參數(shù)1、2、3,函數(shù)SUM則無從求值。
函數(shù)“=VLOOKUP(2,A:C,3,)”,沒有參數(shù)2、A:C和3,函數(shù)VLOOKUP如何在A:C區(qū)域查找A列中是2那一行第3列的數(shù)值?
當(dāng)然,也有不需要參數(shù)的函數(shù),如“=PI()”、“=NOW()”、“TODAY()”等。
函數(shù)參數(shù)傳遞的原理
C語言中參數(shù)的傳遞方式一般存在兩種方式:一種是通過棧的形式傳遞,另一種是通過寄存器的方式傳遞的。這次,我們只是詳細(xì)描述一下第一種參數(shù)傳遞方式,另外一種方式在這里不做詳細(xì)介紹。
首先,我們看一下,下面一個(gè)簡單的調(diào)用例程:
int Add (int a, int b, int c)
{
return a+b+c;
}
void main()
{
int x =0 , y = 1, z = 2;
int result = 0;
result = Add(x, y, z);
printf(“Result for x+y+z %d”, result);
}
借助以上例程,我們具體看一下,參數(shù)是如何傳遞的。首先,我們了解一個(gè)知識點(diǎn),就是“()”操作符在C語言中有很多含義,比如說,結(jié)合符、函數(shù)調(diào)用符等。那么在result = Add(x,y,z)語句中當(dāng)然為函數(shù)調(diào)用符,因此在編譯階段,遇到函數(shù)調(diào)用符后的執(zhí)行序?yàn)?,從最后一個(gè)參數(shù)開始壓棧,壓棧順序?yàn)閦-》y-》x, 直到將全部的參數(shù)壓到調(diào)用棧中,然后call到Add對應(yīng)的函數(shù)地址開始執(zhí)行。那么壓棧執(zhí)行完成后,??臻g,從上到下依次的順序?yàn)閤-》y-》z(因?yàn)闂5纳L方向?yàn)橄蛏?,即地址低的地方,因此,x在地址最低的地方,即棧頂)。因此,在被調(diào)用函數(shù)中參數(shù)的讀取和操作也都是發(fā)生在棧中的。
-
函數(shù)
+關(guān)注
關(guān)注
3文章
4380瀏覽量
64848
發(fā)布評論請先 登錄
二維數(shù)組作為函數(shù)參數(shù)傳遞在實(shí)際中的應(yīng)用

#硬聲創(chuàng)作季 計(jì)算機(jī)基礎(chǔ):函數(shù)的參數(shù)傳遞



函數(shù)的參數(shù)傳遞(1)#程序設(shè)計(jì)基礎(chǔ)

函數(shù)的參數(shù)傳遞(2)#程序設(shè)計(jì)基礎(chǔ)



keil 變量xdata函數(shù)參數(shù)傳遞
怎么將函數(shù)參數(shù)傳遞給內(nèi)聯(lián)ASM
為什么調(diào)用C的函數(shù)參數(shù)傳遞的往往是傳值?
函數(shù)參數(shù)傳遞出現(xiàn)錯(cuò)誤
單片機(jī)的本質(zhì)函數(shù)參數(shù)傳遞詳細(xì)資料說明

評論