为什么下面的程序结果a = 9 ?不是地址传递吗?Private Sub Command1_Click()
Dim a As Integer
a = 9
test (a)
Debug.Print "a=" + CStr(a)
End SubPublic Function test(ByRef a)
a = 0
End Function
Dim a As Integer
a = 9
test (a)
Debug.Print "a=" + CStr(a)
End SubPublic Function test(ByRef a)
a = 0
End Function
解决方案 »
- Combox循环问题
- 如何用代码连接服务器,共取得共享文件夹的访问权限呢?
- 怎样获取天数
- 请教一下vb有x轴和y轴吗如果有具体怎么表示,如果有具体怎么表示x和y轴
- 怎样在worksheets中再添加一个新的worksheet呢?
- 為什麼我用activeskin皮控件后,我原來界面上的label1控件就不見了?---救我啊!~
- 用什么函数可以得到一个字符串中所需要的一部分,比如说前几位
- 请教关于为已开发好的VB程序制作安装程序的问题
- 各位前辈,请帮我这个新手解决一下这个问题,谢谢
- 用API函数建立ODBC??????
- 散分,推站www.ibzoo.com有些有价值的电子书可以下载的
- 请问用vb自带的报表工具中的rptiamge控件如何和数据库中的image字段关联
FUNCTION MYFUN(BYREF K AS STRING)
K=="ABCDEFG"
END FUNCTION
SUB TT()
DIM A AS STRING
A="123456'
CALL MYFUN(A)
MSGBOX A '些时,A的内容是ABCDEFG
END SUB
如果给按地址传递的参数指定数据类型,就必须将这种类型的值传递给参数。可以给参数传递一个表达式,而不是数据类型。VB计算表达式,如果可能的话,还会按要求的类型将值传递给参数。
把变量转换成表达式的最简单的方法就是把它放在括号内。例如,为了把声明为整数的变量传递给过程,该过程以字符串为参数,则可以用下面的语句:
Sub CallingProcedure()
Dim intX As Integer
intX = 12 * 3
Foo(intX)
End Sub
Sub Foo(Bar As String)
MsgBox Bar ‘Bar的值为字符串′36′
End Sub应该可以懂了吧,你那段代码就是把 a=9 的地址传给test过程~~所以结果就是 a=9
如果把CALL去掉改成:MYFUN(A)
那么结果就不是ABCDEFG,而是123456了。你举的例子我明白,但我不明白去掉CALL之后为什么结果就变了。
我想问的就是这个问题。
test (a)
和
test a
会得到不同的两种结果,主要是传入的内容不一样
test(a)是传入表达式,而不是传入地址?那么我试了一下,把test(a)改为 b = test(a)
结果就不是9,而是0了。
这次怎么又传地址了?
b=test((a))
然后再看看a的值就知道了。多谢 CrazyDogHH3(浪漫如枫) ,有时间常来com版捧场喔 :)
函数调用只有下面这两种形式:
1)call test(a)
2) test a所以,当写成test(a)的时候,系统会匹配第2种方式,
即把(a)看成一个元素,所以不是传递地址。再举个例子:
如果写成test (a,b)
同样由于系统会把(a,b)看成一个参数,但这个参数不
能被解析,所以编译会报错。
Thank you all! ^_^