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