VB关于sub和byref的问题,如图

因一段时间没用VB,现在新公司又是要用到VB。今天碰一问题。调用方法的时候,最初写成了C的写法,方法名(参数),导致不是预期的结果。后使用了三种形式来跑此方法。发现这个了... 因一段时间没用VB,现在新公司又是要用到VB。
今天碰一问题。调用方法的时候,最初写成了C的写法,方法名(参数),导致不是预期的结果。
后使用了三种形式来跑此方法。发现这个了
1:test(i) ……这种写法在VB中确实不是正规的,但是发现他也能跳进方法,但是不能达到byref的效果,就如同变成了byval,不知道有没有留意过这个问题?
2:test i 正常
3:call test(i) 正常
展开
 我来答
K_BEAT
2013-07-18 · TA获得超过1246个赞
知道小有建树答主
回答量:879
采纳率:91%
帮助的人:433万
展开全部

您好,


这确实是一个匪夷所思的问题,针对这个 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 的效果!

三心全乱
2013-07-18 · TA获得超过6160个赞
知道小有建树答主
回答量:518
采纳率:100%
帮助的人:241万
展开全部
要注意 test(i) 是编译无法通过的,实际是test (i),中间有个空格。
空格隔开后,后面就是参数,这个参数是(i)而不是i,单独的i是变量,加上括号就是表达式了,表达式相当于就是传了个15过去,而不是传i的地址过去,所以就没有byref的效果了。

call test(i) 是最正式的表达方式,务必带括号,这时和VC的写法一致。

现在的VB.net好像已经强制统一加括号了,写的时候不打括号无法出现自动完成列表。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
szqaly
2013-07-18 · TA获得超过1745个赞
知道大有可为答主
回答量:2107
采纳率:77%
帮助的人:1628万
展开全部
test(i) 这个是特殊情况,括号不是test的组成部分,而是表达式的组成部分 : 过程是 test 参数是 (i) 。所以它先计算表达式 (i) 的值,然后把返回的值作为参数传递给过程。
这样通了吧?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
设计营地
2013-07-18 · 分享交流设计软件相关的知识
设计营地
采纳数:552 获赞数:860

向TA提问 私信TA
展开全部
传值和传地址,只要理解就能解决。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
猫吖乐日计6950
2013-07-18 · TA获得超过100个赞
知道答主
回答量:321
采纳率:0%
帮助的人:99.5万
展开全部
调用过程可以用call test1(a)或者直接test1 a以下为错误写法:test1 (a)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式