Byref (函数结果)
 
指定通过引用返回函数结果

语法

Function name ( parameter-list ) ByRef As datatype

说明

使函数结果通过引用返回,而不是通过值返回。返回ByRef的函数将返回变量的地址,而不是像通过值返回时一样复制。这允许函数的调用者修改函数结果指向的变量。

如果未指定ByRef,则默认值是按值返回函数结果。

具有ByRef结果的函数不应该从函数返回局部变量,因为它们在从函数返回时将被破坏,使任何指针或引用无效。为了帮助编写安全的代码,编译器将在Function = x (或name = x )赋值和Return x 语句中使用局部变量时显示错误消息。

注意:在赋值表达式的左侧使用'='符号,当函数调用一个参数时,函数的结果(由引用返回)必须括在括号中,以解决解析歧义从fbc版本0.90,'=>'可以用于赋值,代替'=',与初始化器相同,允许避免解析歧义(无括号)。对于参数列表,即使是空的,也应该总是用括号括起来。

运算符(成员或全局)在用作函数时,也可以通过引用返回结果,使用相同的语法。

例子

Function min( ByRef I As Integer , ByRef J As Integer ) ByRef As Integer
    ''通过引用返回最小的整数,不会创建副本。
    If I < J Then
        Return I
    Else
        Return J
    End If
End Function

Dim As Integer A = 13, B = 7
Print A, B
Print min( A , B )
min( A , B ) = 0
Print A, B

Function f( ) ByRef As Const ZString
    ''这个字符串字面值(因为在内存中静态赋值)将通过引用返回,不会创建任何副本。
    Function = "A B C D"
End Function

Print f( )

Dim Shared As String s

Function f1( ) ByRef As String
   ''此变长字符串将通过引用返回,不会创建副本。
   Function = s
End Function

Function f2( ByRef _s As String ) ByRef As String
   ''此变长字符串将通过引用返回,不会创建副本。
   Function = _s
End Function

s = "A B C D"
Print s

f1( ) &= "EFGH"
Print s

''在撰写本文时,需要附上括号。
( f2( s ) ) &= "IJKL"
Print s

Function power2( ByRef _I As Integer ) ByRef As Integer
   _I *= _I
   ''该整数将通过引用返回,不会创建副本。
   Function = _I
End Function

Dim As Integer I = 2
power2( power2( power2( I ) ) )  ''函数return-byref级联等价于((I * I)*(I * I))*((I * I)*(I * I))= I ^ 8
Print I


与QB差别

  • 新的FreeBASIC

参考