Redim a(i)是建立动态数组,方法是用dim等声明一个括号内为空的数组,然后在过程中用Redim来指定数组的大小.
注意,每次使用Redim 会使原来数组中的值丢失.
在本例子中,用for i=1 to 5
Redim a(i)
则开始定义一个Redim a(1),Redim a(2),Redim a(3),Redim a(4)
Redim a(5).即对数组进行了5次定义.而最后有效的只有一个a(5).
而a(i)=i .即在a(5)这个数组中只有给定了一个值a(5)=5.没有定义的都是0.
所以在For i = 1 to 5
Sum = sum + a(i)
Next I
中.sum=0+0+0+0+5=5
a(2)=0
Private sub form_click()
Dim I as integer,a() as integer,sum as integer
For i = 1 to 5 '这个循环的结果是A(1)~A(5)分别=1~5
Redim a(i) '重定义数组A,更改上限到i
A(i)=i
Next i
For i = 1 to 5 '这个循环的作用是将A(1)~A(5)的值都加到Sum变量中
Sum = sum + a(i) '将A(i)的值,加到Sum中
Next I
Print sum,a(2) '输出Sum及A(2)的值
End sub
这题不仔细看的话,得到的结果是 1+2+3+4+5=15
但结果不是这样,主要是因为 Redim在作怪,这个Redim每次重定义后,并没有将以前的结果保存起来,所以,到第5次Redim时,前面的四个都被初始化为0,只有第5个才是5
因此,A(1)+A(2)+...+A(5)=0+0+0+0+5 =5
因为在for里边,所以ReDim a(i)被定义了5次,估计只有最后一次循环的时候的a(5)定义成功了,然后接着给a(5)赋值为5。a(1)……a(4)都是0。
然后第二个循环计算的是sum=a(1)+a(2)+a(3)+a(4)+a(5)
结果sum=5,而a(2)是0。
如果
Private sub form_click()
Dim I as integer,a() as integer,sum as integer
Redim a(5)
For i = 1 to 5
A(i)=i
Next i
For i = 1 to 5
Sum = sum + a(i)
Next I
Print sum,a(2)
End sub
的话,结果就是“15 2”了。
Redim a(i) 动态定义数组
For i = 1 to 5
Redim a(i)
A(i)=i
Next i '该循环为动态定义数组,并给数组赋值,单因为数组没有定义为保留状态,所以只有最后一个a(5)=5保留,其余的a(1)..a(4)值为0.
For i = 1 to 5
Sum = sum + a(i)
Next I '此循环为计算,但因a(1)..a(4)都为0,所以sum=a(5)=5.
Print sum,a(2) '打印sum和a(2). sum=5,a(2)=0
ReDim 用于指定或修改动态数组的大小,并初始化数组,也就是把数组内容全都=0,就像刚声明的一样。
For i = 1 to 5
Redim a(i)
A(i)=i
next
每次为a(i)赋值前都要先重新声明为i维,此时a(0 to i)=0,然后最后维=i,这样结束循环时,a(0 to 4)=0,a(5)=5
For i = 1 to 5
Sum = sum + a(i)
Next I
由于没有给sum赋值,其声明时初始值为0,sum=a(0)+a(1)+……+a(5)=5
a(2)=0