gpt4 book ai didi

vba - VBA ByRef 如何在幕后工作?

转载 作者:行者123 更新时间:2023-12-05 01:51:35 29 4
gpt4 key购买 nike

假设我有一个采用整数值 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 如何处理代码中的文字值?

非常感谢!

最佳答案

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

参数是局部作用域的变量,它们是与传递给过程的参数截然不同的独立实体。 VB virtual machine在一个表中管理所有这些实体地址。

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

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

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

关于vba - VBA ByRef 如何在幕后工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72158098/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com