其實還有傳值參數;
先看個簡單的例子來說明:
private sub command1_click()
dim a as integer,b as integer
a = 5: b = 10
print a, b '調用函數前顯示a,b的值,顯示:5 10
print fun(a, b) '調用函數並輸出結果,顯示:199
print a, b '調用函數前顯示a,b的值,顯示:100 10
end sub
private function fun ( x as integer , Byval y as integer) as integer
x = 100
y = 99
fun = x + y
end function
調用後顯示:199沒有問題吧?但是調用函數後,再次顯示會出現:100 10呢?
原因就是自定義函數fun()中,x前沒有關鍵字Byval(省略了ByRef)是傳址參數,而y是傳值參數;它們的區別,前者把外部調用它的對應變量地址傳遞給它了;後者是把數值傳遞給它了;結果就是,前者在自定義函數中對參數的改變就是對外部調用變量的改變,而後者不會改變外部調用的變量。
現在回來分析妳的代碼;
因為自定義函數 fun()中的三個參數,是按照傳址規則的參數,所以每次調用結束後,a,b,c,的值,就是函數裏邊最後x,y,z,的值。
在print fun ( a, b, c ) + fun ( a, b, c ) 語句裏調用了2次
第1次,調用前,a=5,b=10,c=15,進入函數即:x=5,y=10,z=15,
第1次,調用後,函數結束的時候;
z = x '5 外面的c也為5 (所謂傳址,既函數內變量z指向的地址就是外部變量c)
x = x + y '15 外面的a也為15
y = y + z '15 外面的b也為15
fun = x + y '30
這時,a=15,b=15,c=5
第2次,調用前,a=15,b=15,c=5,進入函數即:x=15,y=15,z=5,
第2次,調用後,函數結束的時候;
z = x '15 外面的c也為15
x = x + y '30 外面的a也為30
y = y + z '30 外面的b也為30
fun = x + y '60
所以當兩次調用後,輸出a,b,c
看到:30 30 15
雖然抽象,但是抓住關鍵,不難理解,多多體會就理解了!