vb的一个问题 谢谢

来源:百度知道 编辑:UC知道 时间:2024/06/14 18:44:06
.以下程序的正确运行结果是_______。
Dim a(10) As Integer, i As Integer
Private sub s1()
For I=1 to 10
a(i)=i*2
Next i
End sub
Private sub s2()
Dim a(10) As integer, i as integer
For i=1 to 5
A(i)=i
Next i
End sub
Private sub s3(a() as integer)
Dim i as integer
For i=1 to 10
Print a(i);
Next i
Print
End sub
Private Sub Form_Click()
s1
call s3(a)
s2
call s3(a)
End Sub

希望有解释
尤其是为什么第二行是2 4 6 8 10 12 14 16 18 20
而不是12 3 4 5 6 7 8 9 10呢?

谢谢!

程序中定义两个a(10),一个是窗体变量,一个是局部变量,Private Sub Form_Click()
s1
call s3(a)
s2
call s3(a)
End Sub
在其中,传给s3的变量都是窗体变量a(10)。虽然在s2中也有a(10),但这个a(10)只在s2内部起作用,等执行完s2后,返回,这时s2中的a(10)就不再起作用了。因此两行的结果都一样。但注意如果把s2中的Dim a(10) As integer去掉,就不一样了,那时s2中的a(10)就跟s3中的a(10)一样了。两行结果就会不同。你试试.

你想问的应该是 s2() 过程,为什么没有对A数组起影响

A数组,你是定义的一个窗体模块级的变量,这个变量,在整个窗体中有效

在S2过程中,他又定义了同样一个变量,而这个变量,仅仅只是局部变量,他不会影响到外面的模块级变量,当然,如果S2过程,没有定义,是会影响到的,
所以,虽然调用 了S2过程,但外部的这个A数组,并没有受到影响

另外说一下,如果S2过程的局部变量A数组,不是定义的,而是以数组传址(ByRef)方式传放,此时虽然也是一个局部变量,但由于是传址方式,这样的形参也会影响到外面的实参变量