下列程序的输出结果为_。 Private Sub Command1_Click() Dim a()

 我来答
营霞衷胭
2019-03-24 · TA获得超过3.6万个赞
知道小有建树答主
回答量:1.4万
采纳率:31%
帮助的人:869万
展开全部
量,才看起来很复杂,要分析清楚就必须先搞清楚各个变量的使用范围,和调用规则。
Dim
x
As
Integer,
y
As
Integer'这里有一组外部变量,整个过程都可以调用
Private
Sub
Command1_Click()
Dim
a
As
Integer,
b
As
Integer'局部变量,在这个过程中出现的都是指这个变量,其他地方的不可以调用,同名变量的变化也不会影响到它
a
=
5:
b
=
3
Call
sub1(a,
b)
Print
a,
b
Print
x,
y’这里就是指输入外部变量x,y
End
Sub
Private
Sub
sub1(ByVal
m
As
Integer,
n
As
Integer)
'这里有个注意点:m和n的传递方式不同,简单说来就是call
sub1(a,b)中a的值传给m,之后m的改变不会影响a,两者独立改变值,而b的值传给n后,n的值改变会影响b,也就是最后print
a,b中b的值是最后一个n值返回给b的。所以最后才会b=2
Dim
y
As
Integer'这是必须与前面外部y区分的局部y,在sub1中涉及到的都是这个局部y,它的改变与外部y无关。
x
=
m
+
n:
y
=
m
-
n'局部的y只在这里有改变,之后始终为2
m
=
fun1(x,
y)'传递的参数是外部x和局部y
n
=
fun1(y,
x)
End
Sub
Private
Function
fun1(a
As
Integer,
b
As
Integer)
As
Integer
'这里的参数a,b相当于fun1的局部变量,只和前面调用函数时的x,y有关,和之前的那组a,b无关,这里的传递方法也是需要注意。
x
=
a
+
b:
y
=
a
-
b'注意点:计算了x=8+2=10之后,因为传递方法是互相影响的类型,那么fun1这里的a的值也随之改变,下面计算y时就是y=10-2=8
这就是你的第一个问题所在。而且还要注意:这里获得赋值的y是那个外部变量的y,因为那个局部变量的y只在sub1函数内有效,其他地方无效。
Print
x,
y'输出外部x和外部y
fun1
=
x
+
y
End
Function
我就是解释了一部分,我想弄清楚标注地方的说明,就能够把下面的分析弄通~还有一点
你如果把所有函数括号里参数传递的方法都定为byval,那么输出就是你自己的答案。
ByVal

ByRef(默认值)
这两个是子过程的参数传递时,指定参数按什么传递的
ByVal(按值传递)
ByRef(按地址传递)
具体这样来理解:
过程中的参数列表,我们称形参
调用过程时的参数列表,我们称实参
在调用时,我们要将实参的值传递给形参,这样过程才能拿这些数据参与计算并实现一些功能
那么在传递的过程中,就存在这两种传递方式
传值时(ByVal),是先给形参开辟一个临时地址,将实参的内容传入这个临时地址,这样,传递后,形参与实参是在两上不同的地址中,也就是说他们是相互独立的
传址时(ByRef),是直接将实参的地址传递给形参,这样,形参与实参就共用一个地址,所以,形参内容的改变,也直接改变了实参的内容
通过上面的分析,你只要记得:
按值传递时(ByVal),形参的改变不会影响到实参
按址传递时(ByRef),形参的改变,会影响到实参
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式