51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 2308|回复: 10
打印 上一主题 下一主题

[原创] ByVal与ByRef

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2007-8-21 17:44:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
pa = 1
Fun(pa)
msgbox pa,,"pa"

Function Fun(byRef para)
        para = para +1
       msgbox para,,"para"
End Function


本以为pa的值将会变为2,可是结果没有。。。
pa的值都没变。
ByVal与ByRef运行结果相同!错在哪里吖?
那要如何才能实现按地址传递呢?
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
发表于 2007-8-21 17:52:50 | 只看该作者
看我的博客里有
回复 支持 反对

使用道具 举报

该用户从未签到

3#
发表于 2007-8-21 18:00:54 | 只看该作者
不会啊
比如说
Public Sub swap(byref a,byref b)
        Dim c
        c = a
        a = b
        b = c
End Sub

调用它:
dim x,y
x = 1
y = 2
call swap(x,y)
msgbox x  '为 2
msgbox y  '为 1

[ 本帖最后由 yuandjing 于 2007-8-21 18:02 编辑 ]
回复 支持 反对

使用道具 举报

该用户从未签到

4#
 楼主| 发表于 2007-8-21 18:09:28 | 只看该作者
对比风版主以及楼上的文章,终于找到了原因!竟然是调用function时必须用Call Fun(pa)。没想到Call还有这个用处,看来还得认真看帮助啊!要学的地方还太多啊!sdlkfj5
谢谢两位的回答!sdlkfj6
回复 支持 反对

使用道具 举报

该用户从未签到

5#
发表于 2007-8-21 18:55:27 | 只看该作者
好像byref 用来作输出吧
回复 支持 反对

使用道具 举报

该用户从未签到

6#
发表于 2007-8-21 22:16:33 | 只看该作者
我的理解是: 对于function来说,如果要用call,则必须将参数扩起来; 如果不用call,则一定不能将参数扩起来。所有lz的调用语句:
Fun(pa)
是不合法的。
回复 支持 反对

使用道具 举报

该用户从未签到

7#
发表于 2007-8-21 22:50:19 | 只看该作者
原帖由 xuehuiyiwang 于 2007-8-21 22:16 发表
我的理解是: 对于function来说,如果要用call,则必须将参数扩起来; 如果不用call,则一定不能将参数扩起来。所有lz的调用语句:
Fun(pa)
是不合法的。


说的不够全面!

需要将参数括起来的情况包括:
1、call FuncName(a)   ‘用 Call
2、ret = FuncName(a) '返回值付给变量
3、if FuncName(a) > 0 then '返回值参与比较

不需要将参数括起来的情况
FuncName a
回复 支持 反对

使用道具 举报

  • TA的每日心情
    开心
    2016-2-27 08:48
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]测试小兵

    8#
    发表于 2007-8-22 00:38:57 | 只看该作者
    如果有开发经验,就很容易明白这些了
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    9#
     楼主| 发表于 2007-8-22 09:21:42 | 只看该作者
    以前还真没注意到这些!只以为script语言没那么严格,随便拿来就用。学习了!谢谢各位的回答!sdlkfj3
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    2015-3-12 14:20
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]测试小兵

    10#
    发表于 2007-8-22 09:45:05 | 只看该作者
    原帖由 yabest 于 2007-8-21 22:50 发表


    说的不够全面!

    需要将参数括起来的情况包括:
    1、call FuncName(a)   ‘用 Call
    2、ret = FuncName(a) '返回值付给变量
    3、if FuncName(a) > 0 then '返回值参与比较

    不需要将参数括起来的情况
    ...


    恩,总结的很全面
    我再总结下
    就是用call 的时候要加括弧
    还有就是要取他的返回值的时候要用括弧
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2022-7-13 15:22
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]测试小兵

    11#
    发表于 2007-8-22 09:50:00 | 只看该作者
    调用函数时,参数传递有“传值”和“传地址”之分
    原来这里有类似的
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-11-16 02:08 , Processed in 0.077988 second(s), 28 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表