Skip to content

BYREF(参数)


显式按引用传递参数的声明修饰符

语法

Byref param as datatype

用法

[ declare ] { sub | function } proc_name ( Byref param as datatype )

说明

按引用传递变量(即其地址)给子例程或函数。当变量按引用传递时,目标子例程或函数可以修改该变量的内容。

-lang qb-lang fblite 方言中,Byref 是默认的参数传递约定,除非 Option ByVal 生效。

ByVal 相反。

注意:常量或字面量表达式也可以传递给这样的过程(按引用接收),但它们显然不能从过程体内部修改。在这种情况下,编译器会按引用传递一个用该常量或字面量表达式初始化的临时变量。

注意:自 fbc 1.20.0 起,当 STRINGN 类型的参数传递给 BYREF ZSTRING(或 BYVAL ZSTRING PTR)参数时,会被复制到临时变量中(因为不期望 STRINGN 有自己的终止空字符),并在调用后复制回来。

警告:按引用传递时,建议传递与声明参数类型相同(或完全兼容,例如派生类型)的参数。尽管在某些情况下编译器接受传递不同类型,但结果往往不符合预期。

示例

start GeSHi

vb
Dim MyVar As Integer

Sub ChangeVar(ByRef AVar As Integer)
    AVar = AVar + 1
End Sub

MyVar = 1
Print "MyVar: "; MyVar 'output = 1
ChangeVar MyVar
Print "MyVar: "; MyVar 'output = 2
Sleep
End

end GeSHi

方言差异

  • -lang fb 方言中,Byval 是除 String 和用户自定义 Type(默认按 Byref 传递)之外所有内置类型的默认参数传递约定。ZstringWstring 内置类型也默认按 Byref 传递,但禁止按 Byval 传递。数组始终按 Byref 传递,且禁止使用 ByrefByval 修饰符。
  • -lang qb-lang fblite 方言中,Byref 是默认的参数传递约定。

与 QB 的差异

  • FreeBASIC 新增特性

另请参阅

返回 目录

基于 FreeBASIC 官方文档翻译 如有侵权请联系我们删除
FreeBASIC 是开源项目,与微软公司无隶属关系