
VB关于sub和byref的问题,如图
因一段时间没用VB,现在新公司又是要用到VB。今天碰一问题。调用方法的时候,最初写成了C的写法,方法名(参数),导致不是预期的结果。后使用了三种形式来跑此方法。发现这个了...
因一段时间没用VB,现在新公司又是要用到VB。
今天碰一问题。调用方法的时候,最初写成了C的写法,方法名(参数),导致不是预期的结果。
后使用了三种形式来跑此方法。发现这个了
1:test(i) ……这种写法在VB中确实不是正规的,但是发现他也能跳进方法,但是不能达到byref的效果,就如同变成了byval,不知道有没有留意过这个问题?
2:test i 正常
3:call test(i) 正常 展开
今天碰一问题。调用方法的时候,最初写成了C的写法,方法名(参数),导致不是预期的结果。
后使用了三种形式来跑此方法。发现这个了
1:test(i) ……这种写法在VB中确实不是正规的,但是发现他也能跳进方法,但是不能达到byref的效果,就如同变成了byval,不知道有没有留意过这个问题?
2:test i 正常
3:call test(i) 正常 展开
5个回答
展开全部
您好,
这确实是一个匪夷所思的问题,针对这个 Test (i) 不正常的问题,可以尝试用使用中括号(在 VB 中有特殊用途,这个时候就能派上用场,不过 MSDN 上没有特别详细的解释,只能自己意会了)来解决:
Option Explicit
Private Sub cmdOK_Click()
Dim i%
i = 15
Me.Print "计算前:" & CStr(i)
Test [i]
Me.Print "计算后:" & CStr(i)
End Sub
Sub Test(ByRef i As Integer)
i = i + 1
Me.Print "计算中:" & CStr(i)
End Sub
以上代码的运行效果如下:
这样就达到了 ByRef 的效果!
展开全部
要注意 test(i) 是编译无法通过的,实际是test (i),中间有个空格。
空格隔开后,后面就是参数,这个参数是(i)而不是i,单独的i是变量,加上括号就是表达式了,表达式相当于就是传了个15过去,而不是传i的地址过去,所以就没有byref的效果了。
call test(i) 是最正式的表达方式,务必带括号,这时和VC的写法一致。
现在的VB.net好像已经强制统一加括号了,写的时候不打括号无法出现自动完成列表。
空格隔开后,后面就是参数,这个参数是(i)而不是i,单独的i是变量,加上括号就是表达式了,表达式相当于就是传了个15过去,而不是传i的地址过去,所以就没有byref的效果了。
call test(i) 是最正式的表达方式,务必带括号,这时和VC的写法一致。
现在的VB.net好像已经强制统一加括号了,写的时候不打括号无法出现自动完成列表。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
test(i) 这个是特殊情况,括号不是test的组成部分,而是表达式的组成部分 : 过程是 test 参数是 (i) 。所以它先计算表达式 (i) 的值,然后把返回的值作为参数传递给过程。
这样通了吧?
这样通了吧?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
传值和传地址,只要理解就能解决。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
调用过程可以用call test1(a)或者直接test1 a以下为错误写法:test1 (a)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询