假設我有一個接受整數值 ByRef 的函式,如下所示:
Function myFunc(ByRef funcVal As Integer)
funcVal = funcVal 1
End Function
假設我這樣稱呼它:
Dim myVal as Integer
myVal = 5
Call myFunc(myVal)
據我了解,計算機已為我的myVal變數分配空間并將值 5 放入該空間。當我呼叫myFunc時,計算機基本上將指向該位置的指標傳遞給myFunc,因此當myFunc增加時funcVal,它實際上是在增加相同的位置,所以myVal也會增加。
但是如果我改為這樣呼叫 myFunc 會發生什么:
Call myFunc(5)
計算機是否仍然給出myFunc指標,如果是,指標指向什么?或者它是否必須分配一些新空間(而不是像我之前的示例中那樣funcVal使用相同的空間)?myVal
我想這里還有一個相關的問題——VBA 如何處理代碼中的文字值?
非常感謝!
uj5u.com熱心網友回復:
變數存盤在記憶體地址中。文字也是如此。程式也是如此。程式引數也是如此。
引數是區域范圍的變數,它們是與傳遞給程序的引數不同且獨立的物體。VB虛擬機在一個表中管理所有這些物體地址。
當一個變數引數通過參考傳遞時,一個指標被傳遞給相關的程序引數,這使引數可以直接訪問呼叫變數地址。
然而,文字本身顯然是不可變的,所以當文字引數通過參考傳遞時,VM 被迫將文字復制到一個臨時地址,并且這個新地址通過參考傳遞給程序。這允許程序在執行期間使用 AND UPDATE 值,而不會影響程序之外的原始文字值。
本質上,文字總是按值傳遞,而按值傳遞實際上意味著傳遞指向呼叫引數副本的指標。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/470576.html
