回覆列表
  • 1 # 使用者8065227085369

    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為止。一旦超過這個有效期,變數的值就不復存在了。所以,如果想要打印出乙的蘋果數,只能在使用該變數的過程中列印,超出這個過程對該變數的任何操作都是毫無意義的。

  • 中秋節和大豐收的關聯?
  • 監護人管理不當引起的交通事故,應該如何判罰?