關于VB數組里面按值傳遞和按地址傳遞的區別?
1 Private Sub Form_Load() 2 Dim x As Integer 3 x = 2 4 A x 5 Debug.Print x 6 End Sub 7 Sub A(ByRef t As Integer) 8 t = t - 1 9 End Sub 10 Sub B(ByVal t As Integer) 11 t = t - 1 12 End Sub 13 Sub C(t As Integer) 14 t = t - 1 15 End Sub 這是一個極為簡單的Toy程序(呵呵,就是小玩具),不過他卻體現了傳值和傳引用的巨大區別。
第7、10、13行分別是一個過程,這些過程都實現了同一功能,即將參數t的值減一。在窗體的Load事件中,我們定義了一個變量x,然后調用第一個過程(A),注意到第7行中的參數列表中ByRef關鍵字,它代表傳引用。對于傳引用,參數t 和 x其實就是一個變量。就像人有大名也可能有外號的道理一樣。現在對于變量x,它的大名是x,外號是t。那么t-1其實就是x-1.最后打印出來的結果是x-1=1. 再看第10行,對于過程B,它的參數傳遞方式使用了ByVal關鍵字(即傳值) 對于ByVal(傳值),參數t和x根本就是不相關的兩個變量。就如同兩個人一樣(以甲、乙為例),起初甲有兩個蘋果,然后甲告訴乙,你現在也有兩個蘋果了,于是乙樂呵呵的拿著兩個蘋果去過程B中,過程B的作用是將乙的蘋果數減一,那么最后程序所要打印的是甲的蘋果數,顯然,蘋果數2。根本沒發生變化。那么有的朋友會問,這時乙的蘋果數是1吧。答案是錯的。對于變量,它是有生命周期的(在編程中叫做變量的作用域)。上面的代碼中,變量x的有效期從Form_Load事件激活開始,到End Sub(也就是這個事件結束時)為止。而變量t的有效期從過程的第一句開始,到End Sub為止。一旦超過這個有效期,變量的值就不復存在了。所以,如果想要打印出乙的蘋果數,只能在使用該變量的過程中打印,超出這個過程對該變量的任何操作都是毫無意義的。上一篇服務仍然存在的解決方案
下一篇注釋和注解有什么區別