vb过程间参数的传递_第1页
vb过程间参数的传递_第2页
vb过程间参数的传递_第3页
vb过程间参数的传递_第4页
vb过程间参数的传递_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、形式参数与实际参数1形式参数:就是在定义函数或过程的时候命名的参数。通俗讲就是一个记号。2实际参数:就是在执行时,调用函数或过程时,传递给函数或过程的参数。通俗讲就是实际值。3参数嘛,就是一个可变量,它随着使用者的不同而发生变化。举个例子,在中学的时候学过sin(x)函数,这里的x就是形式参数,当你需要求1的正弦值时,你会使用sin(1),这里的1就是实际参数。4形参和实参间的关系:两者是在调用的时候进行结合的,通常实参会将取值传递给形参,形参去之后进行函数过程运算,然后可能将某些值经过参数或函数符号返回给调用者。在过程之间传递参数,形式参数和实际参数是很重要的概念。我们通常说形式参数是过程为

2、了运行的需要预先在内存中保留的地址单元,而实际参数就是在调用过程时放入这些内存地址中进行处理的数据。如果形式参数是一个盒子,那么实际参数就是盒子里面装的东西。在参数传递的过程中,形式参数和实际参数的数据类型要一致。二、参数传递函数参数的传递方式有两种,一种是按地址传递,一种是按值传递。按地址传递:调用函数时,不直接把实参的值“告诉”函数,而是把地址“告诉”它,函数根据这个地址来寻找并处理值,如果函数修改了这个值,也就修改了这个地址对应的值。按值传递:把值复制一份再给函数,这个值只属于函数,函数对这个值的修改不影响原值。VBScript中,要按地址传递可在形参前加ByRef,要按值传递得在形参前

3、加ByVai,如果什么也不加则表示按地址传递。1)按值传递如果在声明过程时,形式参数名前面加上关键字“ByVal”,即规定了在调用此过程时该参数是按值传递的。按值传递参数时,传递的只是变量的副本。如果过程改变了这个值,则所做的改动只影响副本而不会影响变量本身。代码1*PrivateSubCommand1_Click()Dimnum1AsIntegernum1=5Printnum1CallMySub(num1)Printnum1'输出结果为5CallMySub2(num1)Printnum1'输出结果仍为5EndSubPrivateSubMySub(ByValAAsInteger

4、)A=10PrivateSubMySub2(ByValAAsString)EndSubA="abc"EndSub*如果过程中的形式参数设定为按值传递,就不要求调用时相应实参数的类型必须与其一致,只要实参数的值能够转换为形参的类型即可。代码2*PrivateSubCommand1_Click()Dimnum1AsIntegernum1=5Printnum1CallMySub2(num1)Printnum1'输出结果仍为5EndSubPrivateSubMySub2(ByValAAsString)A="abc"*EndSub2)按地址传递参数按地址传

5、递参数时,过程用变量的内存地址去访问实际变量的内容,将结果的变量传递给过程时,通用过程可永远改变该变量值。ByRef是VisualBasic的缺省选项。如果指定按地址传递参数的数据类型,就必须将这种类型的值传给参数,即如果过程中的形式参数设定为按地址传递,就必须要求调用时相应实参数的类型必须与其一致。按地址传递参数时,传递给所调用过程的形参实际是实参的地址。如果过程改变了这个值,则所做的变动也会影响实参变量本身代码3*PrivateSubCommand1_Click()Dimnum1AsIntegernum1=5Printnum1CallMySubByRef(num1)Printnum1

6、9;输出结果为10CallMySubByRef2(num1)Printnum1'默认情况,输出结果仍为10EndSub被调用者可以直接更改就像指针的感觉。按值传递,PrivateSubMySubByRef(ByRefAAsInteger)A=10EndSubPrivateSubMySubByRef2(AAsInteger)A=10EndSub*3)二者比较ByVal传送参数内存的一个拷贝给被调用者。也就是说,栈中压入的直接就是所传的值。ByRef传送参数内存的实际地址给被调用者。也就是说,栈中压入的是实际内容的地址。该地址中的内容。ByVal可选的。表示该参数按值传递。ByRef表示该

7、参数按地址传递。ByRef是VisualBasic的缺省选项。ByVal是传递值,源数据不会被修改。你可以把这个值当作自己的局部变量来使用ByRef是传递地址,源数据可能被修改。你对这个变量的操作将对你传入的那个变量产生影响,4)参数传递中的特殊情况下面演示了实参变量通过加上一个额外的小括号来强制其以单个变量为实参进行在这里默认的byRef已经失效。代码4*PrivateSubCommand1_Click()Dimnum1AsIntegernum1=5Printnum1CallMySubByRef2(num1)Printnum1EndSubPrivateSubMySubByRef2(AAsInteger)A=10EndSub*5)几点说明A. 实际上,如果在过程中不改变形参的值,无论是按值还是按地址传递,结果都是一样的。B. 对于一般过程来讲,参数的主要目的是设定一个条件,所以形参往往只是用来参与计算或给其他变量赋值,其本身的值不会发生改变。C. 在过程中,对按值传递形参变量的值改变不会导致对应实参变量的改变,而按地址传递形参变量的值的改变通常会导致对应的实参变量的改变D. 当变量声明修饰符为Byref,如果参数是一个常量或者表达式,尽管形参声明按地址传递,实际上还是按值传递。参考代码4E. 按地址传递时,形参与实参公用一个内存地址,所以实参与形参的数据类型必须相同,否则会出

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论