vb求助,急!!!全天等候

来源:百度知道 编辑:UC知道 时间:2024/06/28 17:11:46
Private Sub Command1_Click()
Dim m As Integer, i As Integer, x(10) As Integer
For i = 0 To 4: x(i) = i + 1: Next i
For i = 1 To 2: Call prioc(x): Next i
For i = 0 To 4: Print x(i): Next i
End Sub

Private Sub prioc(a() As Integer)
Static i As Integer
Do
a(i) = a(i) + a(i + 1)
i = i + 1
Loop While i < 2
End Sub
运行程序,显示3 5 7 4 5
问题:为什么a(0)=3???
谢谢~~

调用过程的那句 For i = 1 To 2: Call prioc(x): Next i
不是只改变了a(1),a(2) 的值吗??
当把Static i As Integer 改为 dim i As Integer ,
为什么结果为8,8,3,4,5??
谢谢~
对STATIC 的用法不是很明白,例如
Private Sub Command1_Click()
For i = 1 To 10
getvalue i
Next i
Print getvalue(i)
End Sub

Private Function getvalue(ByVal a As Integer)
Static s As Integer
s = s + a
getvalue = s
End Function
为什么运行结果为66 而不是55???

而private, static ,的区别是什么??例如:
Private x As Integer

这个程序是static静态变量的应用,结果是多少不重要 重要你要明白 什么是静态变量,比如这里:i被定义为静态变量,prioc()过程每运行一次,都会保留i的值, 现在 就让我们来看看是怎么运行的?

1.从For i = 0 To 4: x(i) = i + 1: Next i 得出: x(0)=1;x(1)=2;x(2)=3;x(3)=4;x(4)=5;
2.For i = 1 To 2: Call prioc(x): Next i 这句循环2次:

第1次:prioc() i=0(初试值) a()为传人的x()数组;
(1): a(0)=a(0)+a(0+1) 等于:a(0)=1+2=3 所以:x(0)=3
(2): a(1)=a(1)+a(1+1) 等于:a(1)=2+3=5 所以:x(1)=5
循环到i=2 了 不再循环(条件: Loop While i < 2) 因为i=i+1

第2次:prioc() i=2(这里是重点 i=2是上次循环的结果 静态变量被保留 不会清除内存)
(1): a(2)=a(2)+a(2+1) 等于:a(2)=3+4=3 所以:x(2)=7
因为一开始i=2 所以循环一次....之后不再循环

原来的a(3)=4 a(4)=5 未参与计算,即:x(3)和x(4)
输出为:x(0)=3 x(1)=5 x(2)=7 x(3)=4 x(4)=5

最后 如果把Static i As Integer 改为 dim i As Integer , 那么 prioc会多循环很多次 值自然变. 因为每次i都被值0.这里不讲了

这段代码学习的重点有两个:
1>static 静态变量 整个程序中始终保留上次计算的值
2>Do
...
Loop While i < 2 结构 特点:不关条件是否真假 都会循环一次.

Static i As Integer