向过程传递参数
- 来源: https://www.freebasic.net/wiki/wikka.php?wakka=ProPgPassingArguments
- 最后更新: 2022-05-30
向过程传递信息。
声明参数
过程在被调用时可以接收以变量和对象形式传入的信息。在过程调用上下文中,这些变量和对象称为实参(arguments)。这些实参在过程体内被表示为所谓的形参(parameters)。形参的使用方式与任何其他变量或对象相同。
要指定过程在被调用时应接收传入的实参,需在声明过程时带上参数列表。参数列表是一个或多个名称和类型的列表,过程将使用这些名称和类型来引用传递给它的实参。参数列表用括号括起来。
start GeSHi
Sub Procedure (s As String, n As Integer)
Print "The parameters have the values: " & s & " and " & n
End Sub
Procedure "abc", 123end GeSHi
将产生以下输出:
The parameters have the values: abc and 123向过程传递实参有两种方式:按值传递和按引用传递。默认情况下,实参按值传递,除非另有指定。
按值传递实参
按值传递的实参实际上并不直接传递给过程;而是先复制一份副本再传递。这允许过程修改该副本,而原始变量或对象保持不变。
按值将对象传递给过程时,副本是通过调用 Type 或 Class 的复制构造函数来制作的。
要指定实参应按值传递,需在过程声明中的形参名称前加上 Byval 关键字:
start GeSHi
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 = " & argend GeSHi
将产生以下输出:
The variable 'arg' before the call = 10
The parameter 'param' = 20
The variable 'arg' after the call = 10注意括号包围了实参——这里只有一个,arg——在过程调用中。这些括号是可选的,但通常作为表示过程调用的惯例。
按引用传递实参
与按值传递的实参不同,按引用传递给过程的实参是真正地传递;不制作副本。这允许过程修改传递给它的原始变量或对象。
引用类似于变量或对象的别名。每当你引用一个引用时,你实际上是在引用它所别名的实际变量或对象。换句话说,你可以将过程的引用形参视为传递给它的实参;对引用形参所做的任何更改实际上是对它所代表的实参的更改。
要指定实参应按引用传递,需在过程声明中的形参名称前加上 Byref 关键字:
start GeSHi
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 = " & argend GeSHi
将产生以下输出:
The variable 'arg' before the call = 10
The parameter 'param' = 20
The variable 'arg' after the call = 20手动向按引用形参传递指针
通过在实参前指定 Byval 关键字来传递给 Byref 形参,可以直接传递一个地址(通常存储在指针中),强制 Byref 形参引用该地址所指向的同一内存位置。
start GeSHi
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 iend GeSHi
参见
返回 目录