參數(shù)傳遞,是在程序運行過程中,實際參數(shù)就會將參數(shù)值傳遞給相應的形式參數(shù),然后在函數(shù)中實現(xiàn)對數(shù)據(jù)處理和返回的過程,方法有按值傳遞參數(shù),按地址傳遞參數(shù)和按數(shù)組傳遞參數(shù)。
形參:指出現(xiàn)在Sub 和Function過程形參表中的變量名、數(shù)組名,該過程在被調(diào)用前,沒有為它們分配內(nèi)存,其作用是說明自變量的類型和形態(tài)以及在過程中的作用。形參可以是除定長字符串變量之外的合法變量名,也可以帶括號的數(shù)組名。
實參:實參就是在調(diào)用Sub 和Function過程時,從主調(diào)過程傳遞給被調(diào)用過程的參數(shù)值。實參可以是變量名、數(shù)組名、常數(shù)或表達式。在過程調(diào)用傳遞參數(shù)時,形參與實參是按位置結(jié)合的,形參表和實參表中對應的變量名可以不必相同,但它們的數(shù)據(jù)類型、參數(shù)個數(shù)及位置必須一一對應。
等號、函數(shù)名稱、括弧和參數(shù),是函數(shù)的四個組成部分。
函數(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ù)值?
當然,也有不需要參數(shù)的函數(shù),如“=PI()”、“=NOW()”、“TODAY()”等。
函數(shù)參數(shù)傳遞的原理
C語言中參數(shù)的傳遞方式一般存在兩種方式:一種是通過棧的形式傳遞,另一種是通過寄存器的方式傳遞的。這次,我們只是詳細描述一下第一種參數(shù)傳遞方式,另外一種方式在這里不做詳細介紹。
首先,我們看一下,下面一個簡單的調(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ù)是如何傳遞的。首先,我們了解一個知識點,就是“()”操作符在C語言中有很多含義,比如說,結(jié)合符、函數(shù)調(diào)用符等。那么在result = Add(x,y,z)語句中當然為函數(shù)調(diào)用符,因此在編譯階段,遇到函數(shù)調(diào)用符后的執(zhí)行序為,從最后一個參數(shù)開始壓棧,壓棧順序為z-》y-》x, 直到將全部的參數(shù)壓到調(diào)用棧中,然后call到Add對應的函數(shù)地址開始執(zhí)行。那么壓棧執(zhí)行完成后,??臻g,從上到下依次的順序為x-》y-》z(因為棧的生長方向為向上,即地址低的地方,因此,x在地址最低的地方,即棧頂)。因此,在被調(diào)用函數(shù)中參數(shù)的讀取和操作也都是發(fā)生在棧中的。
-
函數(shù)
+關注
關注
3文章
4365瀏覽量
63872
發(fā)布評論請先 登錄
相關推薦
二維數(shù)組作為函數(shù)參數(shù)傳遞在實際中的應用








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

評論