vb传址与传值???

tondayong1981 2004-11-21 08:19:02
Private Sub Form_Click()
Dim intA As Integer
intA = 1
Call sub1(intA)
Print intA
End Sub

Private Sub sub1(intB As Integer)
Print intB
intB = 10
Print intB
End Sub

对于上面的这个程序,intB接受的是intA=1的地址
那我把他打印应该是个地址,为什么打印的intB还为1??
...全文
530 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
Cnxiaowei 2004-11-22
  • 打赏
  • 举报
回复
好好看下书和msdn
byref By reference 引用来传递 --------------VB里默认的传递参数的方法
你在函数的参数列表里选择了 intB as integer 实际在编译的过程中系统帮你加上了byref
function(Byref A as integer)
不说了自己看 引用和 值传递吧

郁闷
行云边 2004-11-22
  • 打赏
  • 举报
回复
Private Sub sub1(intB As Integer)
Print intB '打印intB 地址上的值 相当于c里的 * intB
Print varptr(intB) '打印intB 地址
intB = 10
Print intB
End Sub
Mars.CN 2004-11-22
  • 打赏
  • 举报
回复
郁闷,你C和VB学混了吧!
homezj 2004-11-21
  • 打赏
  • 举报
回复
天大的误会!
传址,不是传变量地址的值,而是按地址传变量的值,相当于引用;
你的intB参数是按址传递的,所以它与intA指向的是同一内存地址,二者的值会同时改变。

传值,则相当于复制;
参数在过程中的使用的是个复本,过程中的改变对原变量没有影响。
creazyfish 2004-11-21
  • 打赏
  • 举报
回复
同意楼上的
allen820125 2004-11-21
  • 打赏
  • 举报
回复
传址啦,VB默认的是byref
传值需要在参数前加byval
不过我建议你即使传址也把byref加上,好习惯
lang_csdn 2004-11-21
  • 打赏
  • 举报
回复
VB 默认是 byref
qiqi5521 2004-11-21
  • 打赏
  • 举报
回复
如果要按值传递参数,需要显示的声明 byval
Private Sub sub1(byval intB As Integer)
这样的话, intB 相当于这个函数的私有变量,它的初值=intA
qiqi5521 2004-11-21
  • 打赏
  • 举报
回复
Private Sub sub1(intB As Integer)
这个函数是按引用传递参数,可以认为intB是实参的一个别名,所以intA 和intB是同一个变量, 所以你 改变intA 就等于 改变 intB。要打印一个变量的地址,用print varptr(intB)
jilate 2004-11-21
  • 打赏
  • 举报
回复
值,
地址用byref
kennymoni 2004-11-21
  • 打赏
  • 举报
回复
这哪里是传址呀?
是传值吧.

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧