複製鏈接
請複製以下鏈接發送給好友

參數傳遞

鎖定
參數傳遞,是在程序運行過程中,實際參數就會將參數值傳遞給相應的形式參數,然後在函數中實現對數據處理和返回的過程,方法有按值傳遞參數,按地址傳遞參數和按數組傳遞參數。
中文名
參數傳遞
外文名
Parameter Passing
方    法
值傳遞,地址傳遞,數組傳遞

參數傳遞定義

形參:指出現在Sub 和Function過程形參表中的變量名、數組名,該過程在被調用前,沒有為它們分配內存,其作用是説明自變量的類型和形態以及在過程中的作用。形參可以是除定長字符串變量之外的合法變量名,也可以帶括號的數組名。
實參:實參就是在調用Sub 和Function過程時,從主調過程傳遞給被調用過程的參數值。實參可以是變量名、數組名、常數或表達式。在過程調用傳遞參數時,形參與實參是按位置結合的,形參表和實參表中對應的變量名可以不必相同,但它們的數據類型、參數個數及位置必須一一對應。 [1] 
兩者關係
1. 形參只能是變量,實參可以是常量、變量或表達式。在被定義的函數中,必須指定形參的類型。
2. 實參與形參的個數應一樣,類型應一致。字符型和整型可以互相通用。
3. 在調用函數時,如果實參是數組名,則傳遞給形參的是數組的首地址
4.實參傳遞給形參是單向傳遞,形參變量在未出現函數調用時,並不佔用內存,只在調用時才佔用。調用結束後,將釋放內存。執行一個被調用函數時,形參的值如果發生改變,並不會改變主調函數中的實參的值。 [2] 
5.形參如同公式中的符號,實參就是符號具體的值,在調用過程前必須得到賦值;調用過程就是實現形參與實參的結合,把實參的值通過調用傳遞給形參,相當於把值代入公式進行計算。 [1] 

參數傳遞方法

按值傳遞參數
按值傳遞參數時,是將實參變量的值複製一個到臨時存儲單元中,如果在調用過程中改變了形參的值,不會影響實參變量本身,即實參變量保持調用前的值不變。按值傳遞參數時,需要在參數名前加"ByVal"關鍵字。
按地址傳遞參數
按地址傳遞參數時,把實參變量的地址傳送給被調用過程,形參實參共用內存的同一地址。在被調用過程中,形參的值一旦改變,相應實參的值也跟着改變。如果實參是一個常數或表達式,Visual Basic 6.0會按"傳值"方式來處理,按地址傳遞不需要"ByVal"關鍵字 [3] 
按數組傳遞參數
在VB6.0中,允許使用數組作為實參傳遞到子過程的形參中,數組傳遞必須採用地址傳遞的方式來傳遞參數。數組參數在傳遞時應注意以下兩個方面:
① 在實參和形參列表中只寫數組名,忽略維數的定義,但圓括號不能省,當數組作為參數傳遞時,系統將實參數組的起始地址傳給過程,使形參數組也具有與實參數組相同的起始地址,若參數是多維數組,每維以逗號分隔;
② 被調過程可分別通過LboundUbound函數確定實參數組的下界上界 [4] 

參數傳遞調用帶參數的函數

在調用函數時,您可以向其傳遞值,這些值被稱為參數。
這些參數可以在函數中使用。
您可以發送任意多的參數,由逗號 (,) 分隔:
myFunction(argument1,argument2)
當您聲明函數時,請把參數作為變量來聲明:
function myFunction(var1,var2){這裏是要執行的代碼}
變量和參數必須以一致的順序出現。第一個變量就是第一個被傳遞的參數的給定的值,以此類推。

參數傳遞實例

<button onclick="myFunction('Bill Gates','CEO')">點擊這裏</button><script>function myFunction(name,job){alert("Welcome " +name+ ", the " +job);}</script>
對於下述程序,試分析用傳值、傳地址、傳數組方法傳遞參數時所得的打印結果。
PROGRAM SS(input,output);
VAR
A,B:integer;
PROCEDURE P(x,y,z:integer);
begin y:=y+1;z:=z+x;
end;
BEGIN
A:=2;b:=3;
P(A+B,A,A);
writeln (‘A=‘,A);
END
解答
(1)傳值:把實參的值計算出來傳給形參。
在調用過程P時,形參x=5;y=2;z=2
出過程P時,形參x=5;y=3;z=7
這並不把結果回送到主程序,所以結果為A=2
(2)傳地址:實參計算出結果,把地址送形參。
設變量T=A+B(結果為5)。執行時把T、A、A的
地址(設為addr1,addr2,addr2)送給形參:
x=daar1,y=addr2,z=addr2。
T的地址addr1即x→T(5)
A的地址addr2即y→A(2)
A的地址addr2即z→A(2)
執行過程P即為:①y↑:=y↑+1;②z↑:=z↑+x↑
所以,①為A:=A+1=3
②為A:=A+T=8。 因此,最後A=8.
(3)傳數組:相當於執行 A:=2;B:=3; A:=A+1;A:=A+(A+B)
writeln(‘A=‘,A);
所以,結果為A=9。 [5] 
參考資料
  • 1.    參數傳遞  .VB6.0程序設計網.2009-6-19[引用日期2012-06-03]
  • 2.    參數的傳遞  .CSDN博客.2012-02-09[引用日期2012-06-03]
  • 3.    參數傳遞  .51cto讀書網.2009-07-27[引用日期2012-06-03]
  • 4.    數組作為傳遞參數  .51cto讀書網.009-07-27 [引用日期2012-06-03]
  • 5.    陳火旺.編譯原理(第三版.北京市海定區紫竹院南路23號:國防工業出版社,2010年2月:28-29