8.6 参数的参考属性
173
打个比方,你家的门锁有两把钥匙,分别由两个人拿着。不管是哪一个人都可以打开房门,改变家里家具的摆放位置。如果子过程的参数具有“参考”属性,那么,当调用子程序时负责提供该参数数据的是一个变量的话,在子程序中修改了该参数的值,那个变量的值也会跟着被改变。 ①在“_按钮1_被单击”事件子程序中添加两个局部变量。 ②把编辑框提供的文本型数据转换到整数型。 注意:
文本型数据默认具有参考属性,所以此例中为了演示参数的参考属性,把文本型数据转换到整数型。
③添加信息框,显示调用子程序后,“变量2”的值。
④将“信息框子程序”两个参数的类型改为整数型。
⑤添加代码,修改“参数2”的值。 注意:
为了更好地了解程序的运行过程,可以通过在关键代码行前设置断点的方法来跟踪代码行的执行情况。
⑥在代码行前设置断点。
设置断点的方法:用光标选中将被设置断点的代码行,再按F9键。
⑦按F5键运行程序,在启动窗口的编辑框中输入“123”,单击“按钮1”。 窗口消失,程序停止,一个断点变黄。这就说明在“_按钮1_被单击”事件子程序中,第一个断点处的“信息框子程序”将被执行。 174
“参数2”的值被改变。
“参数1”的值是“变量1”的值。两个条件都成立。
再按F5键,“信息框子程序”里的代码被执行。说明子程序已经被调用。
再按F5键,断点变为红色,弹出条件成立的信息框。
⑧单击“确定”按钮。
程序又跳到了“信息框子程序”被调用处的下一行代码处,说明“信
息框子程序”执行完毕。
再按F5键,弹出“_按钮1_被单击”事件子程序中的信息框。
即使“参数2”的数据被改变,“变量2”仍保存原值。
“参数2”没有设置参考。
由于运行开始时“编辑框1”内的数据为空文本,转换到整数后为“0”。
175
⑨单击“确定”按钮,代码运行结束。关闭程序,然后设置“参数2”的参考属性,设置“参数2”的参考属性的方法类似可空属性的设置,在参数定义表“参考”栏相应空格内单击使之出现一个“√”号。
按F5键运行。最后信息框显示“变量2”的值和“参数2”的值是相同的。
当使用变量向子程序的参数传递数据时,如果所传递过来的变量为数组、用户定义数据类型、库定义数据类型、字节集型或文本型,则无论参数的“参考”属性是否为真,都将是传递变量的指针(即该变量的内存地址),这样在子程序中改变该参数的值时相应变量的值也会被改变;如果所传递过来的变量类型与相应参数的数据类型不一致但可以相互转换,譬如将整数型变量传递到小数型的参数时,则在数据被实际传递前,系统将首先自动将整数型变量的值转换为小数型数据,然后再进行传递,在这种情况下,即使参数的“参考”属性为真,系统也无法传递指向原变量的指针,只能传递经过类型转换后的变量的值。如果系统将数据指针成功地传递过来,那么在子程序中对此参数内容的更改将会相应地反映到调用子程序时负责提供相应参数数据的变量上。 8.7 子程序的返回值
子程序可以返回数据,称为返回值,但必须首先定义返回值的类型,并且要在子程序中使用“返回”命令进行返回。
176
①将“信息框子程序”的返回值类型设置为整数型。 ②删除下面两行代码。 参数2 = 123 信息框 (“参考的使用方法。” + #换行符 + “变量2==” + 到文本 (变量2), 0,) ③在“_按钮1_被单击”事件子程序中 添加名称为“返回值”的整数型变量。
④“返回值”变量用来保存“信息
框子程序”返回的整数型数值。
⑤在“信息框子程序”的每个分支
处添加返回命令。 ⑥将“信息框子程 序”里的两个“信息 框”命令复制到“_ 按钮1_被单击”子程 序的判断语句中。 ⑦最后按F5键运 行程序。
177