动态数组 :
在定义数组时,一般己经指定了上下界,这样数组大小就确定了。但是有时可能事先无法确认到底需要多大的数组,所以希望能够在运行时改变数组的大小,这就要用到动态数组。动态数组可以在任何时候改变大小。
在 VB 中,动态数组灵活、方便,有助于有效利用内存。例如,可短时间使用一个大数组,然后,在不使用这个数组时,将内存空间释放给系统。
6.3.1 创建动态数组
要创建动态数组,可按照以下步骤进行 :
1) 用 Public 语句 ( 公用数组 ) 、 Dim 语句 ( 模块级数组 ) 、 Static 或 Dim 语句 ( 局部数组 ) 在过程中声明数组。给数组附以一个空维数表,这样就将数组声明为动态数组。
2) 用 ReDim 语句分配实际的元素个数。格式为 ReDim [Preserve] 数组名 (< 维数定义 >)[As< 类型 >]
说明:
(1) ReDim 语句只能出现在过程中。与 Dim 语句、 Static 语句不同, ReDim 语句是一个可执行语句。
(2) 对于任一维数, ReDim 语句都能改变元素数目以及上下界。但是,数组的维数不能改变。
(3) 可以用变量设置动态数组的边界 :
ReDim M(x , y)
(4) 声明动态数组的时候并不指定数组的维数,数组的维数由第 1 次出现的 ReDim 语句指定。
例 5 :利用动态数组,解决斐波那契 (Fibonacci) 数列问题。
程序代码:
Private Sub Text1_KeyPress(KeyAscii As Integer)
Dim n As Integer
List1.Clear
If KeyAscii = 13 Then
n = Val(Text1.Text)
ReDim f(n)
f(0) = 0: f(1) = 1
p = Format("Fib(" & 1 & "):", "!@@@@@@@@@@@@@") & Format(f(1), "########")
List1.AddItem p, 0
For i = 2 To n
f(i) = f(i - 1) + f(i - 2)
p = Format("Fib(" & i & "):", "!@@@@@@@@@@@@@") & Format(f(i), "########")
List1.AddItem p, i - 1
Next
End If
End Sub
执行结果:

6.3.2 保留动态数组的内容
?每次执行 ReDim 语句时,当前存储在数组中的值将全部丢失。 VB 重新将数组元素的值置为 0( 对 Numeric 数组 ) 、置为零长度字符串 ( 对 String 数组 ) 、 Empty( 对 Variant 数组 ) 、或者置为 Nothing( 对于对象的数组 ) 。
?有时希望改变数组大小而又不丢失数组中的数据,使用具有 Preserve 关键字的 ReDim 语句可以做到这点。
|