标题:请教一道关于vb的题目,高职的
只看楼主
hua0598
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2007-5-19
 问题点数:0 回复次数:3 
请教一道关于vb的题目,高职的
Dim a As Integer, b as integer, c as integer
Private Sub Command1_Click()
a = 2: b = 3: c = 4
Call sub1(1, b, c)
z = a + b + c
Print z
Print a, b, c
End Sub
Sub sub1(a, x, ByVal y)
a = a + 2: b = b + 2: c = c + 2
x = a + b: y = b + c
End Sub
上机运行后,最后的结果是16,a,b,c值分别为2,8,6
我的理解是:题目中a,b,c都定义成了窗体级变量,所以a=1+2=3,b=x=3+5=8,c=4+2=6
我想问问,为什么a的值不是3
既然结果中a=2,那么为什么c也是按值传递的,c=4才对呀?
求大家能帮我想想,解决我心中的困惑,明天就要考试了,万分感谢!
搜索更多相关主题的帖子: 高职 
2007-05-19 12:25
slore
Rank: 5Rank: 5
等 级:贵宾
威 望:16
帖 子:1108
专家分:0
注 册:2005-7-1
得分:0 
sub1里第2个形参是x
调用的时候实参是b

所以sub1运行完x是多少b就是多少。。。

a虽然是按地址传递,但是调用的时候第一个参数是是1,非变量。
过程中的a貌似是不影响外面的a(因为a作为了形参的变量名)

c=c+2 c不是sub1的形参……那他就是按最初的窗体级变量对待,4+2=6
最后c就是6。。。。按值传递的是y,c把值给了y,但是y不像x一样x=b
y和c没有关系。

快上课了……
2007-05-19 13:27
ouzhiguang
Rank: 1
来 自:湖南长沙
等 级:新手上路
威 望:1
帖 子:240
专家分:0
注 册:2007-5-18
得分:0 

Dim a As Integer, b As Integer, c As Integer, d As Integer
Private Sub Command1_Click()
a = 2: b = 3: c = 4
Call sub1(1, b, c)
z = a + b + c
Print z
Print a, b, c
End Sub
Sub sub1(d, x, ByVal y)
a = d + 2: b = b + 2: c = c + 2
x = a + b: y = b + c
End Sub
比较一下他们的不同,这个就跟你的预期一样 输出为3,8,6

2007-05-19 14:11
hua0598
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2007-5-19
得分:0 

哦,我明白了,形参只能当做局部变量,所以a,x,y都是局部变量,谢谢大家帮我解决。为什么书上都没有提到过。郁闷!

[此贴子已经被作者于2007-5-19 14:56:41编辑过]

2007-05-19 14:55



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-140631-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.181798 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved