关于VB数组里面按值传递和按地址传递的区别
2011-06-29 23:33
357 查看
1 Private Sub Form_Load() 2 Dim x As Integer 3 x = 2 4 A x 5 Debug.Print x 6 End Sub 7 Sub A(ByRef t As Integer) 8 t = t - 1 9 End Sub 10 Sub B(ByVal t As Integer) 11 t = t - 1 12 End Sub 13 Sub C(t As Integer) 14 t = t - 1 15 End Sub 这是一个极为简单的Toy程序(呵呵,就是小玩具),不过他却体现了传值和传引用的巨大区别。 第7、10、13行分别是一个过程,这些过程都实现了同一功能,即将参数t的值减一。 在窗体的Load事件中,我们定义了一个变量x,然后调用第一个过程(A),注意到第7行中的参数列表中ByRef关键字,它代表传引用。 对于传引用,参数t 和 x其实就是一个变量。就像人有大名也可能有外号的道理一样。现在对于变量x,它的大名是x,外号是t。那么t-1其实就是x-1.最后打印出来的结果是x-1=1. 再看第10行,对于过程B,它的参数传递方式使用了ByVal关键字(即传值) 对于ByVal(传值),参数t和x根本就是不相关的两个变量。就如同两个人一样(以甲、乙为例),起初甲有两个苹果,然后甲告诉乙,你现在也有两个苹果了,于是乙乐呵呵的拿着两个苹果去过程B中,过程B的作用是将乙的苹果数减一,那么最后程序所要打印的是甲的苹果数,显然,苹果数2。根本没发生变化。那么有的朋友会问,这时乙的苹果数是1吧。答案是错的。对于变量,它是有生命周期的(在编程中叫做变量的作用域)。上面的代码中,变量x的有效期从Form_Load事件激活开始,到End Sub(也就是这个事件结束时)为止。而变量t的有效期从过程的第一句开始,到End Sub为止。一旦超过这个有效期,变量的值就不复存在了。所以,如果想要打印出乙的苹果数,只能在使用该变量的过程中打印,超出这个过程对该变量的任何操作都是毫无意义的。
相关文章推荐
- 关于javascript数组与VB DLL中中数组的传递问题
- 关于“数组名”和“数组名取地址”的区别
- 关于C++里面的函数中,按值传递与按引用传递的区别
- 一个关于按地址传递和按值传递区别的代码,给新手
- 关于Java 拷贝数组方法 Arrays.copyOf() 是地址传递还是值传递
- 关于操作系统里面的P-V操作的信号量跟Linux下的无名信号量的区别!
- 数组名和数组名取地址的区别
- 关于LinuxC/C++中字符指针char * str 与字符数组 char str []的一点小区别
- 数组名和数组名取地址的区别
- C语言数组首地址和数组名取地址区别
- 四、关于数组的认识、int和integer的区别
- C语言----关于值传递和地址传递
- 关于ping带源地址和不带源地址有什么区别呢
- 数组的地址+1 和 指向数组的指针+1 区别
- 请问在CODEVISION AVR C中如何在函数中传递数组的地址?
- 请问在CODEVISION AVR C中如何在函数中传递数组的地址?
- 我自己关于 PHP 数组传递的误区
- VB几种函数参数传递方法,Variant,数组,Optional,ParamArray
- 数组名和数组名取地址的区别
- 关于EasyUI在Datagrid里面将某一列设置为超链接并传递当前行的某一参数传递给打开的对话框。