1私有子窗体uuload()2dimxasinteger3x=24ax5调试.打印x6endsub7suba(byreft为整数)8t=t-19endsub10subb(byvalt为整数)11t=t-112endsub13subc(t为整数)14t=t-115endsub这是一个非常简单的玩具程序(呵呵,这是一个小玩具),但传递值和传递引用之间存在很大的差异。
第7、10和13行都是实现相同功能的进程,即参数t的值减去1。在窗体的load事件中,我们定义一个变量x,然后调用第一个过程(a),注意第七行参数列表中的byref键表示引用。对于pass引用,参数t和x实际上是变量。就像一个人有一个大名,他也可能有一个昵称。对于变量x,它的大名是x,昵称是t,那么t-1实际上是x-1。打印出来的最终结果是x-1=1。再看第10行。对于进程b,其参数传递方法使用byval关键字(即值传递)。对于byval,参数t和x是两个完全不相关的变量。就像两个人一样(以a和b为例),一开始a有两个苹果,然后a告诉b你现在也有两个苹果,所以b高兴地拿了两个苹果来处理b。过程b的功能是将b的苹果数减少一个,所以最后的程序是打印a的苹果数,显然,苹果数是2。一点都没变。然后有朋友会问,这个时候,b的苹果数是1。答案是错误的。对于变量,它有一个生命周期(在编程中称为变量范围)。在上面的代码中,变量x的有效期从形式开始,加载事件被激活,直到结束sub(即事件结束)。变量t的有效期从过程的第一句话开始,到sub结束。一旦超过有效期,变量的值就不存在了。因此,如果要打印出b的苹果数,只能在打印过程中使用变量。在此过程之外对变量的任何操作都是没有意义的。
unitypass数组是值传递值传递:(形式参数类型是基本数据类型):调用方法时,实际参数将其值传递给相应的形式参数。formal参数只使用实际参数的值初始化它自己的存储单元。它是两个不同的存储单元,因此在方法执行过程中形式参数值的变化不会影响实际参数的值。引用传递:(形式参数类型是引用数据类型参数):也称为地址传递。调用方法时,实际参数是对象(或数组)。此时,实际参数和形式参数指向同一地址。在方法执行中,对形式参数的操作实际上就是对实际参数的操作。此结果将在方法结束后保留。方法执行中形式参数的变化会影响实际参数。