VBA ByRef 在幕后是如何工作的?

How does VBA ByRef work behind the scenes?

假设我有一个采用整数值 ByRef 的函数,如下所示:

Function myFunc(ByRef funcVal As Integer)
  funcVal = funcVal + 1
End Function

假设我这样称呼它:

Dim myVal as Integer
myVal = 5
Call myFunc(myVal)

据我了解,计算机已为我的 myVal 变量分配了 space,并将值 5 放入 space。当我调用 myFunc 时,计算机基本上将指向该位置的指针传递给 myFunc,因此当 myFunc 递增 funcVal 时,它实际上是递增相同的位置,所以 myVal 也递增。

但是如果我这样调用 myFunc 会发生什么:

Call myFunc(5)

计算机是否仍然给 myFunc 一个指针,如果是,指向什么?或者它是否必须将一些新的 space 分配给 funcVal(而不是像我之前的示例中那样使用与 myVal 相同的 space)?

我想这里还有一个相关的问题 - VBA 如何处理代码中的文字值?

非常感谢!

变量存储在内存地址。文字也是如此。程序也是如此。程序参数也是如此。

参数是局部范围的变量,它们与传递给过程的参数是不同的和独立的实体。 VB virtual machine 在 table.

中管理所有这些实体地址

当通过引用传递变量参数时,会将指针传递给关联的过程参数,这使参数可以直接访问调用变量地址的内存。

但是,文字本身显然是 immutable,因此当通过引用传递文字参数时,VM 被迫将文字复制到一个临时地址,这个新地址通过参考程序。这允许过程在执行期间使用和更新值而不影响过程外的原始文字值。

In essence literals are always passed by value and passing by value actually means passing a pointer to a copy of the calling argument.