BYREF(参数)
- 来源: https://www.freebasic.net/wiki/wikka.php?wakka=KeyPgByref
- 最后更新: 2024-03-07
显式按引用传递参数的声明修饰符
语法
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
Endend GeSHi
方言差异
- 在 -lang fb 方言中,
Byval是除String和用户自定义Type(默认按Byref传递)之外所有内置类型的默认参数传递约定。Zstring和Wstring内置类型也默认按Byref传递,但禁止按Byval传递。数组始终按Byref传递,且禁止使用Byref或Byval修饰符。 - 在 -lang qb 和 -lang fblite 方言中,
Byref是默认的参数传递约定。
与 QB 的差异
- FreeBASIC 新增特性
另请参阅
- 向过程传递参数
DeclareByValByref(函数返回值)Byref(变量)
返回 目录