设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 1725|回复: 9
打印 上一主题 下一主题

[模块/函数] 帮忙看下这个题

[复制链接]
回帖奖励 8 点金钱 回复本帖可获得 1 点金钱奖励! 每人限 1 次(中奖概率 50%)
跳转到指定楼层
1#
发表于 2015-9-26 20:24:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
'主程序
sub ab(a,b)
public a
dim b,c
a=5 : b=5 : c=5
do sub1(a,b)
msgbox a,b
end if

'子程序
sub sub1(x,y)
do while y<x
y=y+1
x=x+y
loop
end sub

完。
这个是我老师给我出的题目,把我难倒了。
用高中生的语言跟我解释一下,,,谢谢!

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
推荐
发表于 2015-10-1 14:38:20 | 只看该作者
jnne 发表于 2015-9-30 12:29
请问:
sub test ()
call ab(1,2)

其实,在这里有几次传递过程的。请结合我的语句来理解:
1、在test里,a,b分别赋值为1和2。
2、然后执行过程ab。这时候a,b重新被赋值为5,5。
3、然后执行子程序sub1(5,5)
4、由于没有符合5<5的情况,因此,这时候会跳出sub1的循环【最好加上语句避免死循环】。
5、执行a,b……这时候的a,b其实已经是x,y了。
默认情况下,VBA是传址过程。如果改为byval来传值的话,a,b传递过去之后,a和b还是不会变的【5,5】。这一点,你可以运行test测试。
  1. Sub ab(ByVal a, ByVal b)
  2. Dim c
  3. a = 5: b = 3: c = 5
  4. Call sub1(a, b)
  5. MsgBox a & ":" & b
  6. End Sub

  7. '子程序
  8. Sub sub1(ByVal x, ByVal y)
  9. Do While y < x
  10. y = y + 1
  11. x = x + y
  12. If x >= 20 Then Exit Do
  13. Loop
  14. MsgBox x & ":" & y
  15. End Sub

  16. Sub test()
  17. Call ab(1, 2)
  18. End Sub
复制代码
对比代码:

  1. Sub ab(ByRef a, ByRef b)
  2. Dim c
  3. a = 5: b = 3: c = 5
  4. Call sub1(a, b)
  5. MsgBox a & ":" & b
  6. End Sub

  7. '子程序
  8. Sub sub1(ByRef x, ByRef y)
  9. Do While y < x
  10. y = y + 1
  11. x = x + y
  12. If x >= 20 Then Exit Do
  13. Loop
  14. MsgBox x & ":" & y
  15. End Sub

  16. Sub test()
  17. Call ab(1, 2)
  18. End Sub
复制代码


回复 支持 1 反对 0

使用道具 举报

2#
发表于 2015-9-27 09:25:46 | 只看该作者
这个有点难,有请大神闪亮登场
3#
发表于 2015-9-27 12:16:57 | 只看该作者

回帖奖励 +1 点金钱

存在二义性吧?
4#
 楼主| 发表于 2015-9-28 12:13:26 | 只看该作者

什么是二义性?
5#
 楼主| 发表于 2015-9-28 12:13:51 | 只看该作者
解决不了
回复

使用道具 举报

6#
 楼主| 发表于 2015-9-29 00:48:13 | 只看该作者
'主程序
sub ab(a,b)                  
public a
dim b,c
a=5 : b=5 : c=5
do sub1(a,b)
msgbox a,b
end if

'子程序
sub sub1(x,y)
do while y<x
y=y+1
x=x+y
loop
end sub

老师在今天讲了。
跟大家分享一下
a.b.c各赋一个值5
由主程序将a,b给x,y并在程序运行DO循环,直到b(y)小于a(x),
最后输出a,b
7#
发表于 2015-9-29 17:11:53 | 只看该作者

回帖奖励 +1 点金钱

先修正一下。
  1. Sub ab(a, b)
  2. Dim c
  3. a = 5: b = 5: c = 5
  4. Call sub1(a, b)
  5. MsgBox a, b
  6. End Sub

  7. '子程序
  8. Sub sub1(x, y)
  9. Do While y < x
  10. y = y + 1
  11. x = x + y
  12. Loop
  13. End Sub

  14. Sub test()
  15. Call ab(1, 2)
  16. End Sub
复制代码

然后请参考传值过程和传址过程:
http://www.office-cn.net/forum.p ... hlight=%B4%AB%D6%B5
8#
 楼主| 发表于 2015-9-30 12:29:52 | 只看该作者
roych 发表于 2015-9-29 17:11
先修正一下。

然后请参考传值过程和传址过程:

请问:
sub test ()
call ab(1,2)
end sub
什么作用?
Sub ab(a, b)
Dim c
a = 5: b = 5: c = 5
Call sub1(a, b)
MsgBox a, b
End Sub

这个不是已经输出了吗?
10#
 楼主| 发表于 2015-10-2 13:50:06 | 只看该作者
roych 发表于 2015-10-1 14:38
其实,在这里有几次传递过程的。请结合我的语句来理解:
1、在test里,a,b分别赋值为1和2。
2、然后执 ...

谢谢,懂了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-12-3 11:58 , Processed in 0.124132 second(s), 36 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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