VB(一道关于按值传递的题目)

来源:百度知道 编辑:UC知道 时间:2024/09/23 23:47:36
sub strfun(Byval strtemp as integer)as integer
strtemp=strtemp+10
end sub
private sub form_click()
dim strA as integer
strA=10
strfun(stra)
end sub
为什么会是10
而改成按地址传递就会是20
不是已经定义stra=10了吗?
为什么按值传递后还是10
而不是20
在说strtemp=strtemp+10

因为sub strfun(Byval strtemp as integer)as integer 参数是传值而不是传址
所以在执行
strA=10
后,stra=10
而在执行
strfun(stra)
的时候,stra只是把它的值(10)传给了strfun,而strfun得到仅仅是个10,所以strfun无法改变stra

如果是按址传递,则就不同了!

举个例子;
我有个密码,我写在纸上并没有记在脑子里。
你来问我的时候,我看一下纸上的密码告诉你密码(传值)和我把纸条给你(传址),是不同的。
我告诉你密码,你知道了密码,但你不能改,当别人来问我的时候,我看一下纸条上,还是说这个密码。
我把纸条给你,你就可能把纸条的内容改了。当别人再问我密码的时候,我还是照纸条上的内容说的,虽然都是同一个纸条,密码的内容可能已经不一样了——被你改了。

按值传递是单向的,只从主动调用者向子过程传递数据;
按址传递则是双向,开始时向子过程传递,返回时也向调用者传递在子过程里改变了的值