《VB程序设计》第四章第四节 参数的传递.doc
《《VB程序设计》第四章第四节 参数的传递.doc》由会员分享,可在线阅读,更多相关《《VB程序设计》第四章第四节 参数的传递.doc(11页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、VB程序设计第四章第四节参数的传递最后修改: 2010-6-2 23:16:59第四节参数的传递参数是在本过程有效的局部变量,用于传递信息。在调用一个有参数的过程时,首先进行的是“形参和实参结合”,实现调用过程的实参与被调过程的形参之间的数据传递,数据传递有两种方式:按值传递和按地址传递。例如,下面实例由于传递的参数个数不匹配而出错。Private Function Divisor(ByVal x As String,ByVal y As Integer) 函数Divisor计算最大公约数 End FunctionDivisor有两个参数,而调用语句中形参个数只有一个,代码如下:Private
2、 Sub Form_Click()Dim m As Integer, n As Integer, E As IntegerN=InputBox(请输入N )M=InputBox(请输入M )g=Divisor(n) 未提供m参数 Print n;和;m;的最大公约数是: ;gEnd Sub单击窗体运行程序时,则会显示出错信息,如图4-4-1所示。图 4-4-1一、形参和实参1.形参在被调用过程中的形参 ,出现在Sub过程和Function过程中。在过程被调用之前,形参并未被分配内存,只是说明形参的类型和在过程中的作用。形参列表中的各参数之间用逗号(,)分隔,形参可以是变量名和数组名,定长字符串
3、变量除外。2.实参实参是在主调过程中的参数,在过程调用时实参将数据传递给形参。形参列表 和实参列表中的对应变量名可以不同 ,但实参和形参的个数、顺序以及数据类型必须相同。因为“形实结合”是按照位置结合,即第一个实参与第一个形参结合 ,第二个实参与第二个形参结合 ,依此类推。例如,在求最大公约数的例Ex_Divisor1 中被调用函数和调用过程如下:Private Function Divisor(ByVal x As Integer,ByVal y As Integer)End SubPrivate Sub Form_Click()G=Divisor(n,m)End Sub当运行单击窗体事件调
4、用Divisor过程时,首先进行“形实结合”。形参与实参的结合对应关系是:nx,my。3.形参的数据类型在创建过程时,如果没有声明形参的数据类型,则默认为Variant型。例如,将例Ex_Divisor1函数过程中的x为Variant型,y为Integer型:Private Function Divisor(ByVal x,ByVal y As Integer)End Function对于实参数据类型与形参定义的数据类型不一致时, VB会按要求对实参进行数据类型转换,然后将转换值传递给形参。例如,将例Ex_Divisor1函数的实参n的数据类型改为Single型,被调函数如下:Private
5、Sub Form_Click() Dim n As Single,m As Integer, g As IntegerN=InputBox(请输入N )M=InputBox(请输入M )G=Divisor(n,m)Print n;和 ;m;的最大公约数是: ;gEnd Sub被调函数过程如下:Private Function Divisor(ByVal x As Integer, ByVal y As Integer)End Sub 运行上述程序,当从InputBox输入框中输入n为44.5,m为25。当执行“g=Divisor(n,m)”语句时,先将Single型的n转换成44(Intege
6、r),然后将44x,25y. 运行结果为: 44.5和25的最大公约数是:14.使用可选的参数参数列表中的参数可以是可选的,在参数表中含有Optional关键字的参数是可选的。如果某一参数为可选参数,则参数表中此参数后面的其他参数也必须是可选的,并要用 Optional来声明。例如,例Ex_Divisor1的被调函数定义修改为:Private Function Divisor(Optional x As Intege,Optional y As Integer)在Form_Click事件过程中,程序代码如下:g=Divisor(n) 未提供第二个参数g=Divisor(,n) 未提供第一个参数
7、在未提供可选参数时,实际上是将该参数作为具有Variant型的Empty来赋值。不过,在本程序中如果将m或n作为Empty,在Divisor函数中的mod运算时会出错。二、参数按值传递和按地址传递在VB中传递参数有两种方式:按值传递(Passed By Value)和按地址传递(Passed By Reference),其中按地址传递习惯上称为“引用”。1.按值传递参数按值传递使用ByVal关键字。按值传递参数时,VB给传递的形参分配一个临时的内存单元,将实参的值传递到这个临时单元去。实参向形参传递是单向的,如果在被调用的过程中改变了形参值,则只是临时单元的值变动,不会影响实参变量本身,当被调
8、过程结束返回主调过程时,VB将释放形参的临时内存单元。例Ex_Max用函数过程编写求a、b两数中最大数。Max函数为求最大数,在cmdStart_Click事件中调用Max函数,程序代码如下:Option ExplicitPrivate Function max(ByVal x As Integer, ByVal y As Integer)Dim z As IntegerIf x y Thenz = xx = yy = zEnd Ifmax = xText4.Text = xText5.Text = yEnd FunctionPrivate Sub Command1_Click()Dim a
9、As Integer, b As Integer, c As Integera = Val(Text1.Text)b = Val(Text2.Text)Text3.Text = max(a, b)Text6.Text = aText7.Text = bEnd Sub当在文本框txtA和txtB中输入变量a为7,b为8时,数据的传递过程如下:通过函数调用,给形参分配:临时内存单元x和y,将实参a和b的数据传递给形参。在被调函数中x、y和z交换数据,调用结束实参单元 a和b仍保留原值,参数的传递是单向的。运行结果界面如图4-4-2所示,被调函数Max中的x和y已经交换过了,分别为8和7,而主调函数
10、中的a和b仍为7和8。图 4-4-22.按地址传递参数在定义过程时,如果没有ByVal 关键字,默认的是按地址传递参数,或者用Byref关键字指定按地址传递。按地址传递参数,是指把形参变量的内存传递给被调用过程,形参和实参具有相同的地址,即:形参、实参共享同一段存储单元。因此,在被调过程中改变形参的值,则相应实参的值也被改变,也就是说,与按值传递参数不同,按地址传递参数可以在被调过程中改变实参的值。将例Ex_Max求两数中最大数的程序按值传递改为按地址传递,程序代码如下:Option ExplicitPrivate Function max(x As Integer, y As Integer
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VB程序设计 VB程序设计第四章第四节 参数的传递 VB 程序设计 第四 参数 传递
限制150内