过程是什么?
执行一段相同的程序代码
有哪些过程?
Sub |
Function |
子程序 |
函数 |
Call语句调用 |
Call语句调用 |
没有返回值 |
有返回值 |
为什么要使用过程呢?有哪些好处?
避免代码冗长,防止代码的仿佛书写。前面的博客中有说明,这里不做过多赘述
Sub过程和Function过程分别的语法格式是怎样的?
[Private|Public][Static] Sub <过程名> ([参数表]) 过程体 [Exit Sub] End Sub
[Private|Public|Static] Function 函数名([参数表] [AS类型]) [函数体] [<函数名>=<表达式>] [Exit Function] End Function
说明:
过程必须遵守“先说明,后调用”的原则,声明过程就是编写一个能够实现预期功能的程序段,可被重复调用。
过程名的命名规则与变量相同,过程名必须唯一,不得超过255个字符
参数表是用来指明调用该Sub过程时需要传递给该过程的参数及类型,参数表内的参数又称形式参数(简称形参)。可以没有形参,也可以有一个或多个形参。
形参的的命名规则与变量相同,形参具有数据类型,如果省略“AS 类型”不说明类型,默认为Variant型
形参本身是一个名字,它是不占用内存空间的,只有在被函数调用了之后才参与运算、赋值,占用内存空间
函数参数表中的参数,叫形参,调用函数时给的值,叫实参
什么是参数的传递?
调用过程时实参将参数值传递给相应的形参,然后在过程中实现对数据处理和返回结果的过程
参数传递有哪些规则呢?
个数相等、数据类型相容、顺序一致
如果传递参数数据类型不匹配会怎么样?
举例:如下代码中
当程序运行时就会报错:
原因:实参和形参的数据类型不匹配,
说明:再定义的max过程中,形参m、n对应的为Integer(整型)的数据类型,他的范围是正整数、负整数或者0,
而在调用max这个过程中,实参d、c在定义时的数据类型为Single(单精度型),范围为带有小数的实数,
它们数据类型包含的范围不同,就好比,我要装一个大西瓜,你却给我一个小碗,那个小碗能放的下一个大西瓜吗?答案绝对是不可以的。
参数传递传的是什么?
可以传常量、变量、表达式计算的结果、数组。这就和接下来要讲的的传递方式有关了
有哪几种传递方式?
按地址传递(ByVal)
当调用时,系统将实参的值送给形参,形参接收到了值之后就断开了联系。在过程体内对形参的任何操作不会影响到实参
如:我有一本书,通过小明借给了小李,小李实际拿到的是我书的复印本,不管小李怎么修改这本书,对我都是没有影响的
实例:
执行结果如图:
按地址传递(ByRef,默认)
当调用时,将实参的地址传递给形参,实参和形参共享存储单元,在过程体中对形参的任何操作都变成了相应实参的操作
如:实参有一本书,把这本书给了形参,给的不是复印件,而是装这本书的房间钥匙,实参和形参都可以共享它,因为它们都有储存这本书的钥匙,有地址可以使用它,形参拿到这本书可以随意修改,修的就是原稿
实例:
''''''''''''''''' '输出X的值 Private Sub Command1_Click() Dim x As Integer x = 6 Call test(x) Print " sub ̺ x="; x End Sub Sub test(ByRef m As Integer) m = m + 5 End Sub