“图示法’’在VB参数传递过程中的应用 李艳红 (云南省普洱市普洱学院计科系云南普洱665000) 【摘要】:在VB的教学中,过程是一个重难点,尤其是其中的参数传递,知识点抽象,学生比较难 以接受和理解。因此在本文中将实例结合“图示法”进行理解,把学生的抽象与形象思维相结合,从而深 入直观的分析VB过程调用中参数传递的两种方式。 【关键词】:过程调用;参数传递;传值;传地址 Visual Basic(VB)是一门面向对象的可视化编程 参与形参是按地址进行传递的。 工具,采用可视化的图形开发界面,拥有事件驱动、开 发界面友好和功能强大等特点,而且相对于其他的语 向对象程序设计语言中使用最广泛的开发语言之一。 1)传值方式(ByVa1) 传值方式的形参声明格式为:ByVal<形参>As 传值方式(ByVa1)是将实参的数值传给形参,由 言来说简单易学,因此,VB近年来迅速普及并成为面 <类型> 使用VB时除了界面的设计,工作的重心还是程序代 于实参与形参在内存中占用不同的内存单元,当过程 码的编写,但在开发大型复杂程序时,为了简化程序, 被调用时,系统把实参的值复制一份给形参,也可以 减少重复代码,便于程序的调试和维护,提高程序代 将形参看作为实参的一个副本,实参与形参就断开了 码的利用率,经常需要将复杂的问题进行划分使之简 联系。被调过程中对形参的任何操作都不影响实参 单化。通常依据功能进行划分为若干个模块和子模 的,当过程调用结束时,形参所占用的内存单元 时 块,每个相对的功能模块所编写的一段程序称之 被释放。因此,值传递方式是单向传递,即只能由实 为过程。各个的过程之间存在着对其他事件过程 参传递给形参,由此得到:传值(ByVa1)方式时,形参的 的调用。这就要求对过程调用中参数传递的两种方式 改变不影响实参。 有深入的理解。但学生对这个知识点总是难以理解,不 2)传地址方式(Byref或缺省) 传地址方式的形参声明格式为:ByRef<形参> 传地址是指实参将其内存单元的地址传送给形 能正确掌握和使用。因此,在该文中将实例结厶‘‘图示 的参数传递。 法”进行讲解,以使学生正确理解和把握过程调用中 As<类型> VB的通用过程分为两类:一类是子过程(Sub过 参,当调用一个过程时,系统将实参的地址传递给形 程),另一类是函数过程(Function过程)。VB过程中使 参,实参与形参在内存中占用相同的存储单元。因此, 用的参数分为实参和形参,在过程定义中过程名后圆 被调过程中形参值发生变化,主调过程中实参值也会 括号中出现的变量名就是形参,多个形参之间用逗号 随之变化,这种传递方式是双向的,也称双向传递。在 分隔,过程调用之前未为其分配内存空间;而在过程 改变形参的值就意味着在改变实参的值,它们合为了 一调用语句中,在过程名后的参数就是实参,其作用是 体,由此得到:传地址方式(ByRef)时,形参的改变影 将它们的数据(值或地址)传给被调用过程对应的形 响实参。但是纯理论的讲解,学生只是死板的学习了 参变量。在调用过程时,主调过程的实参以逐一匹配 知识点,而不能进行灵活的应用,而且在一些复杂程 的形式传递给被调过程的形参,然后执行被调过程体。 序的理解中经常出错。因此,下面将实例结合图示法 运行被调过程后,又将所得结果返回给主调过程。过 进行讲解,深入分析过程调用中的两种参数传递方 程调用是实现数据传递的重要方式,子过程与函数采 式。 用相同的参数传递机制。 传地址(ByRef),传地址又称为传引用,默认情况下实 例1:单击命令按钮时,下列程序代码的执行结果 Public Sub swapl(ByVal X As Integer,ByVal Y As Integer) 在VB中,参数传递的方式有两种:传值(ByVa1) ̄lJ 是() .196・ 福建电脑{2o13年第6期 … … ~麓 UJlAN e0MPU下 鹣 Dim t As Integer t=x:x y:Y t End Sub Public Sub swap2(x As Integer,Y As Integer) Dim t As Integer t=x:x y:Y t End Sub Private Sub Command l—Click0 Dim a As Integer,b As Integer a=4:b=5 swap1 a,b Print”A1=”;a:”BI=”;b a=4:b=5 swap2 a,b Print”A2=”;a;”B2=”;b End Sub 执行该程序,运行结果为:A1=4 B1=5 A2=5 B2=4,为何得到这样的结果,下面用“图示法”进行详 细的分析,以便让结果的得到过程更加清晰。如下图 所示(——表值的改变,前面的值被后面的值取 代,— 表实参向形参H形参向实参)。 b 5 地址 2014H (ByVa1): ’, y J 叶 地址:2016H 地址:2018H 图1 swapl的执行过程图示 Ia 一5 b 5—4 ’ /地址/ :20 L2H 址:2ol4 传 l地址(E Ref) 20 l2H 1 }地址(ByRef ̄ 20l4H — r 1 r— r 【 20 l2H V 2014} 王 地址:2016H 地址:2018H 图2 swap2的执行过程图示 在上图中,采用了类似教室的编号方法对内存单 元进行了形象的地址编号。从图1可以看出,由于 swapl过程传的是值,所以最终只改变了形参x和Y 的值,而实参a和b的值依然没有改变,a的值依然为 4,b依然为5,所以输出a、b的结果为:Al=4 B1=5。 从图2可以看出, 过程swap2传的是地址,将实参a 的地址2012H传给了形参x,最终实参a与形参x共 用同一地址单元2012H,实参b的地址2014H传给了 形参Y,最终实参b与形参Y共用同一地址单元 2014H。所以对形参x进行操作就等于对实参a进行 操作,而对形参y进行操作就等于对实参b进行操 作,因此最终a的值变为5,而b的值变为4,输出a-,b 的结果为A2=5 B2=4。 从例题1可以看出使用“图示法”使得解题的过 程更加的形象直观,学生更能清楚的理解程序的执行 过程,透彻的理解参数传递的具体过程。实际上‘‘图示 法”的实用性在解决复杂程序的过程中更加突出,如 下例所示。 例2:单击命令按钮时,下列程序代码的执行结果 是() Private Sub CommandI_Click0 Dim x As Integer,Y As Integer,z As Integer x=1:y 2:z=3 Call proc1(x,x,z) Print x:x:z Call proc1(x,y,y) Print x;y;y End Sub Private Sub proc 1(x As Integer,Y As Integer,Z As Integer) x=3 z:Y=2 z:z=x+y End Sub 执行该程序,运行结果为:6 6 12 6 10 10,如果 仅仅利用所学习的理论知识来解决该题,将会非常的 繁杂而且学生也比较容易出错,下面用“图示法”进行 分析,如下图所示(——表值的改变,前面的值被后面 的值取代,—— 表实参向形参,H表形参向实参)。 地址:201 8H 地址:2020H 地址:2022H 图3第一次调用procl的执行过程图示 从图3可以看出,第一次调用proc1过程时,由于 实参传递的是x,x,z的地址,所以形参x和Y得到的 都是实参x的地址2012H,因此使得实参x,形参X和 2o13年第6期l福建电脑 ・197・ 鞲建-Z-.+Z. 整…蹲ljT 耩 辫 jlAN () Y都共用同一地址2012H,三个参数的值都是相等的 2012H,因此使得实参x和形参X共用同一地址 值“1”;Z得到的实参Z的地址2016H,它们共用同一 2012H,参数的值都是相等的值“6”;形参V、z得到的实 地址2016I-I,参数的值都是相等的僧‘3”。执行x=3 参v的地址2014I-I,它们三个共用同一地址2014H,参 z=3"3(形参Z的值为3),执行完后形参x的值为9,由 数的值都是相等的值“2”。执行x=3 z=3"2=6,执行 于实参X,形参x和Y共用同一地址,因此它们的值都 完后实参x和形参x的值为6;接着执行v=2 z: 变为9(见图3),接着执行Y:2 z=2"3(形z的值为 2*2=4,执行完后形参Y的值为4,由于实参Y,形参v 3),执行完后形参Y的值为6,由于实参X,形参X和Y 和Z共用同一地址,因此它们的值最终都变为了4(见 共用同一地址,因此它们的值最终都变为了6(见图 图4)。最后执行z=X+y=6+4=10(实参x和形参x为 3)。最后执行z=X+y=6+6=12(实参x,形参x和Y共 6,形参v、Z与实参Y的值相等,都是改变后的“4'3,因 用同一地址,它们的值最终都变为了6),因此形参Z 此形参z的值变为10。所以Print x;v;y(实参)的结果 的值变为l2,由于实参z与形参z共用同一地址,它 为:6 10 10。本次执行结束后,实参x=6,y=10,z=12(未 们的值相等,所以实参Z的值也改变为12。所以Print 改变)。 x;x;z(实参)的结果为:6 6 12。本次执行结束后,实参 x=6,y=2(未改变),z=12。 本文籽 图示法”应用于教学实例,针对学生难以 理解的参数传递问题,清楚的讲解了传值与传地址中 接着第二次调用proel过程,由于并未对实参进 经常容易混淆和出错的问题,经过教学实践,学生应 行再次的赋值,因此实参的值为第一次调用结束时的 用该方法后,解题的正确率得到了较大的提升,知识 值:X--6,y=2,z=12,第二次调用过程如下图所示(—— 点的难度也大大降低;而且对过程调用中的参数传递 表值的改变,前面的值被后面的值取代,— 表实参 问题进一步理解、掌握,不再停留于以往的理论知识,向形参,H表形参向实参)。 很好的激发了学生学习兴趣和积极性,收到了较好的 教学效果。 参考文献: [1]张洪明,李志平等.大学Visual Basic程序设计教程【M j北 京:科学出版社,2008:2 [2]龚沛曾,杨志强等.Visual Basic程序设计教程[M].北京:高 等教育出版社,2008:12 [3]宋俊荣,古秋婷,马丽芳.VB过程调用的参数传递问题.电 地址:2018H 地址:2020H 地址:2022H 脑知识与技术,2009;5(21) 图4第二次调用procl的执行过程图示 [4]曹苏群.VB参数传递方式判别与解题应用.中国科技信息, 2009;7 第二次调用proc1过程时,由于实参传递的是x, [5]肖捷,祝庚等.VB过程调用中参数的深入分析[I].计算机 2007,(1o 3 Y,Y的地址,所以形参x得到的是实参x的地址 与现代化,(上接第191页) 能相差较大。在任务完成过程中,可能需要求助于不 是可呈现的、可保存的、可表达的,可比较的。在教学 同的同学、老师,或需要图书馆、网络等资源。而这些, 中,可以用文字、照片、截图、PPT等各种形式呈现任 师点评等多种形式来进行考核。 参考文献: 2010(12) 在现行的教学管理下较难实现,还需要学校出台 务成果,可以采用自我评价、组间评价、组间互评、教 更加灵活的机制。 4、必须重视任务成果的考核与评价 任务驱动教学法,是学生在教师的帮助下,紧紧 主探索和互动协作的学习,并最终完成规定的任务。 为了有助于检查学习效果,学生完成的任务成果必须 ._I]福建电脑 围绕任务,通过对学习资源的积极主动应用,进行自 [1]贾润亮计算机基础课程的任务驱动教学研究[[2 ̄http://wenku.baidu.com/view/Oacfo71ab7360b4c2e3f643a.html 198- 福建电脑I 2()l3年第6期