单选题 下列程序段执行时在屏幕上显示的结果是______。
x1=20
x2=30
SET UDFPARMS TO VALUE
DO test WTTH x1,x2
?x1,x2
PROCEDURE test
PARAMETERS a,b
x=a
a=b
b=x
ENDPRO

【正确答案】 B
【答案解析】[解析] 本题主要考查函数调用过程中的参数传递。
调用模块程序的格式如下。
格式1:DO<文件名>|<过程名>WITH<实参1>[,<实参2>,…]
格式2:DO<文件名>|<过程名><实参1>([,<实参2>,…])
调用程序与被调用程序之间的参数传递有以下两种方式。
(1)按“引用”传递
采用格式1调用模块程序时,如果实参是常量或一般形式的表达式,系统会计算出实参的值,并把它们赋给相应的形参变量,称为按值传递。如果实参是变量,则传递的将不是变量的值,而是变量的地址,此时形参和实参实际上是同一个变量(尽管它们的名字可能不同),在模块程序中对形参变量值的改变,同样也是对实参变量值的改变。
(2)按“值”传递
采用格式2调用模块程序时,默认情况下以按值方式传递参数。如果实参是变量,可以利用SET UDFPARMS命令重新设置参数传递的方式。
本题中采用格式1调用模块程序,实参为变量,可知参数是采用按“引用”方式传递的。程序模块test的作用是交换两个变量的值。由于参数是采用按“引用”方式传递的,因此程序模块中对形参变量改变的同时也改变了实参变量的值。