vb中的值传递和地址传递到底有什么区别啊!?急

[复制链接]
查看11 | 回复1 | 2011-6-24 01:03:48 | 显示全部楼层 |阅读模式
回复

使用道具 举报

千问 | 2011-6-24 01:03:48 | 显示全部楼层
1PrivateSubForm_Load()
2DimxAsInteger
3x=2
4Ax
5Debug.Printx
6EndSub
7SubA(ByReftAsInteger)
8t=t-1
9EndSub
10SubB(ByValtAsInteger)
11t=t-1
12EndSub
13SubC(tAsInteger)
14t=t-1
15EndSub
这是一个极为简单的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事件激活开始,到EndSub(也就是这个事件结束时)为止。而变量t的有效期从过程的第一句开始,到EndSub为止。一旦超过这个有效期,变量的值就不复存在了。所以,如果想要打印出乙的苹果数,只能在使用该变量的过程中打印,超出这个过程对该变量的任何操作都是毫无意义的。

自己搜的一个,另外,在msdn帮助中也有相关的说明。学习vb等微软的变成时,安装上msdn,很有帮助。






参考资料:<spanclass=\"gray\"><ahref=\"http://zhidao.baidu.com/question/122514519.html\"target=\"_blank\">http://zhidao.baidu.com/question/122514519.html</a></span>
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行