Skip to content

向过程传递参数


向过程传递信息。

声明参数

过程在被调用时可以接收以变量和对象形式传入的信息。在过程调用上下文中,这些变量和对象称为实参(arguments)。这些实参在过程体内被表示为所谓的形参(parameters)。形参的使用方式与任何其他变量或对象相同。

要指定过程在被调用时应接收传入的实参,需在声明过程时带上参数列表。参数列表是一个或多个名称和类型的列表,过程将使用这些名称和类型来引用传递给它的实参。参数列表用括号括起来。

start GeSHi

vb
Sub Procedure (s As String, n As Integer)
    Print "The parameters have the values: " & s & " and " & n
End Sub

Procedure "abc", 123

end GeSHi

将产生以下输出:

The parameters have the values: abc and 123

向过程传递实参有两种方式:按值传递和按引用传递。默认情况下,实参按值传递,除非另有指定。

按值传递实参

按值传递的实参实际上并不直接传递给过程;而是先复制一份副本再传递。这允许过程修改该副本,而原始变量或对象保持不变。

按值将对象传递给过程时,副本是通过调用 TypeClass 的复制构造函数来制作的。

要指定实参应按值传递,需在过程声明中的形参名称前加上 Byval 关键字:

start GeSHi

vb
Sub Procedure (ByVal param As Integer)
    param *= 2
    Print "The parameter 'param' = " & param
End Sub

Dim arg As Integer = 10
Print "The variable 'arg' before the call = " & arg
Procedure(arg)
Print "The variable 'arg' after the call = " & arg

end GeSHi

将产生以下输出:

The variable 'arg' before the call = 10
The parameter 'param' = 20
The variable 'arg' after the call = 10

注意括号包围了实参——这里只有一个,arg——在过程调用中。这些括号是可选的,但通常作为表示过程调用的惯例。

按引用传递实参

与按值传递的实参不同,按引用传递给过程的实参是真正地传递;不制作副本。这允许过程修改传递给它的原始变量或对象。

引用类似于变量或对象的别名。每当你引用一个引用时,你实际上是在引用它所别名的实际变量或对象。换句话说,你可以将过程的引用形参视为传递给它的实参;对引用形参所做的任何更改实际上是对它所代表的实参的更改。

要指定实参应按引用传递,需在过程声明中的形参名称前加上 Byref 关键字:

start GeSHi

vb
Sub Procedure (ByRef param As Integer)
    param *= 2
    Print "The parameter 'param' = " & param
End Sub

Dim arg As Integer = 10
Print "The variable 'arg' before the call = " & arg
Procedure(arg)
Print "The variable 'arg' after the call = " & arg

end GeSHi

将产生以下输出:

The variable 'arg' before the call = 10
The parameter 'param' = 20
The variable 'arg' after the call = 20

手动向按引用形参传递指针

通过在实参前指定 Byval 关键字来传递给 Byref 形参,可以直接传递一个地址(通常存储在指针中),强制 Byref 形参引用该地址所指向的同一内存位置。

start GeSHi

vb
Sub f( ByRef i As Integer )
    i = 456
End Sub

Dim i As Integer = 123
Dim pi As Integer Ptr = @i

Print i
f( ByVal pi )
Print i

end GeSHi

参见

返回 目录

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