Rss & SiteMap

阳光人的家 http://www.hiafa.com/bbs

阳光之下 你我之家
共16 条记录, 每页显示 10 条, 页签: [1] [2]
[浏览完整版]

标题:[求助]帮忙解释一下这道VB题

1楼
邑辉 发表于:2005-10-17 22:12:31
这是老师上课讲的题,强调名为number的函数n只能是按值传递,不能按地址传递的。(如下)
但是另外一老师提供的答案是按地址传递(Public Function number(n as inteber) as single)
我把两种都运行了一下,得到答案是一样,所以很迷茫。
请大家帮忙解释一下,到底怎么回事呢?
非常感谢!
Option Explicit
Public Sub total()
'该过程是计算s=7+77+777+……+(n个7组成的数),并输出。
Const n = 20
Dim s As Single
Dim i As Integer
For i = 1 To n
s = s + number(i)
Next i
Form1.Print "s="; s
End Sub

Public Function number([COLOR=red]ByVal n As Integer[/COLOR]) As Single
'该函数是求出n个7所组成的数。
Dim k As Integer
number = 0
For k = 1 To n
number = number + 7 * 10 ^ (k - 1)
Next k
End Function

Private Sub Form_Click()
total
End Sub
2楼
jimmy 发表于:2005-10-18 11:26:09
vb很久没碰了……不过,总觉得这里number用按值调用或按址调用对结果没什么影响呀,

因为在number函数里参数n没改变
3楼
邑辉 发表于:2005-10-18 16:23:31
按照老师的说法是如果用按地址传递参数n对过程total的计算有影响,结果只能得到7+777+77777……的结果,就是n只取到奇数的。不过我运行后并不是这样的,所以不能理解他的说明。
4楼
jimmy 发表于:2005-10-18 17:51:44
如果是只取到奇数项,那么在number函数里应该会有类似n=n+1的操作,如果对n没操作,在这里也就无所谓按值调用还是引用调用了
5楼
邑辉 发表于:2005-10-18 20:54:49
就是说如果涉及到函数形参有操作就必须得按地址传递,没有的话,两者都可以?
6楼
BigBianGun 发表于:2005-10-18 22:43:43
我觉得jimmy说的对的阿~

对N没有操作,也就无所谓了。



对于形参有操作,也要看操作的结果是不是你需要返回的阿。

如果操作了不需要返回,那也是随便的。

如果操作了,操作的结果是需要返回的,那就按址好了。

关键在于函数操作是否需要更改参数的值。

你的例子里面只是需要回传一个number的值,对N本身并不需要改变,所以无所谓怎么传递。
7楼
BigBianGun 发表于:2005-10-19 10:54:36
想了一下,你老师说的情况,可能是他混淆了for语句完成后计数器增量的问题。
因为手上的书没有记载,但在我印象中,当如下情况:
for a=1 to b
......
next a
这样的语句运行结束后,b还是原来的b,a变成[COLOR=red]b+1[/COLOR]。不知道是不是这样。
如此,在你的例子里面,n是一样不变的,只[COLOR=red]k=n+1[/COLOR],但是k又是不回传的,所以应该不会出现你老师说的跳跃。
8楼
邑辉 发表于:2005-10-19 19:40:18
哦……懂了,谢谢bigbiangun和jimmy解说
9楼
紫枫 发表于:2005-10-19 23:52:55
邑辉大哥是个人才么!~

懂得化学又懂计算机编程……



这个坛上人才果然多……小生每次看你们谈论专业知识就自卑……
10楼
雪孩子 发表于:2005-10-20 11:45:27
自卑.....

我自惭形秽.....

我五体投地.....
共16 条记录, 每页显示 10 条, 页签: [1] [2]

Copyright ©2004 - 2019 Hiafa.Com
Powered By Dvbbs Version 8.1.1
Processed in 0.02734 s, 2 queries.