声明固定大小的数组 有三种方法声明固定大小的数组,用哪一种方法取决于数组应有的有效范围:
建立公用数组,在模块的声明段用 Public 语句声明数组。 建立模块级数组,在模块的声明段用 Private 语句声明数组。 建立局部数组,在过程中用 Private 语句声明数组。 设定上下界 声明数组时,在数组名之后跟一个用括号括起来的上界。上界不得超过 Long 数据类型的范围(-2,147,483,648 到 2,647)。例如,下列数组声明可出现在模块的声明段: Dim Counters (14) As Integer '15 个元素。 Dim Sums (20) As Double '21 个元素。 为建立公用数组,直接用 Public 取代 Dim。 Public Counters (14) As Integer Public Sums (20) As Double 在过程之中同样的声明使用 Dim: Dim Counters (14) As Integer Dim Sums (20) As Double 第一个声明建立了一个有 15 个元素的数组,其索引号从 0 到 14 。第二个声明建立了一个有 21 个元素的数组,其索引号从 0 到 20 。缺省的下界为 0。 为了规定下界,用关键字 To 显式提供下界(为 Long 数据类型): Dim Counters (1 To 15) As Integer Dim Sums (100 To 120) As String 在前述声明中,Counters 的索引值范围从 1 到 15,而 Sums 的索引值范围从 100 到 200。 包含其它数组的数组 有可能建立 Variant 数据类型数组,并与不同数据类型的数组共居一处。以下代码建立两个数组,一个包含整数,而另一个包含 字符串。然后声明第三个 Variant 数组,并将整数和字符串数组放置其中: Private Sub Command1_Click () Dim intX As Integer '声明计数器变量。 '声明并放置整数数组。 Dim countersA (5) As Integer For intX = 0 To 4 countersA (intX) = 5 Next intX '声明并放置字符串数组。 Dim countersB (5) As String For intX = 0 To 4 countersB (intX) = "hello" Next intX Dim arrX (2) As Variant '声明拥有两个成员的新数组。 arrX (1) = countersA () '将其它数组移居到数组。 arrX (2) = countersB () MsgBox arrX (1) (2) '显示每一个数组的成员。 MsgBox arrX (2) (3) End Sub
多维数组 有时需要追踪记录数组中的相关信息。例如,为了追踪记录计算机屏幕上的每一个像素,需要引用它的 X、Y 坐标。这时应该用多维数组存储值。 可用 Visual Basic 声明多维数组。例如,下面的语句声明了一个过程内的 10 × 10 的二维数组。 Static MatrixA (9,9) As Double 可用显式下界来声明两个维数或两个维数中的任何一个: Static MatrixA (1 To 10,1 To 10) As Double 可以将所有这些推广到二维以上的数组。例如: Dim MultiD (3,1 To 10,1 To 15) 这个声明建立了三维数组,大小为 4 × 10 × 15。元素总数为三个维数的乘积,为 600。 注意 在增加数组的维数时,数组所占的存储空间会大幅度增加,所以要慎用多维数组。使用 Variant 数组时更要格外小心,因为他们需要更大的存储空间。 用循环操作数组 可以用 For 循环嵌套有效的处理多维数组。例如,在 MatrixA 中基于每个元素在数组中的位置为其赋值: Dim I As Integer,J As Integer Static MatrixA(1 To 10,1 To 10) As Double For I = 1 To 10 For J = 1 To 10 MatrixA (I,J) = I * 10 + J Next J Next I 要创建动态数组,请按照以下步骤执行: (如果希望数组为公用数组,则)用 Public 语句声明数组,或者,(如果希望数组为模块级,则)在模块级用 Dim 语句声明数组,或者(如果希望数组为局部数组,则)在过程中用 Static 或 Dim 语句声明数组。给数组附以一个空维数表,这样就将数组声明为动态数组。 Dim DynArray () 用 ReDim 语句分配实际的元素个数。 ReDim DynArray (X + 1) ReDim 语句只能出现在过程中。与 Dim 语句、Static 语句不同,ReDim 语句是一个可执行语句,由于这一语句,应用程序在运行时执行一个操作。 ReDim 语句支持这样的语法,它与固定数组中使用的语法相同。对于每一维数,每个 ReDim 语句都能改变元素数目以及上下界。但是,数组的维数不能改变。 ReDim DynArray (4 to 12) 例如,用第一次声明在模块级所建立的动态数组 Matrix1: Dim Matrix1 () As Integer 然后,在过程中给数组分配空间: Sub CalcValuesNow () . . . ReDim Matrix1 (19,29) End Sub 这里的 ReDim 语句给 Matrix 分配一个 20 × 30 的整数矩阵(元素总大小为 600)。还有一个办法,用变量设置动态数组的边界: ReDim Matrix1 (X,Y) 注意 您可以将字符串赋值给大小可变的字节数组。一个字节数组也可以被赋值给一个可变长的字符串。一定要注意字符串中的字节数会随平台而变化。同一个字符串在 Unicode 平台上的字节数是它在非 Unicode 平台上的两倍。 保留动态数组的内容 每次执行 ReDim 语句时,当前存储在数组中的值都会全部丢失。Visual Basi 重新将数组元素的值置为 Empty(对 Variant 数组)、置为 0(对 Numeric 数组)、置为 零长度字符串(对 String 数组)或者置为 Nothing(对于对象的数组)。 在为新数据准备数组,或者要缩减数组大小以节省内存时,这样做是非常有用的。有时希望改变数组大小又不丢失数组中的数据。使用具有 Preserve 关键字的 ReDim 语句就可做到这点。例如,使用 UBound 函数引用上界,使数组扩大、增加一个元素,而现有元素的值并未丢失: ReDim Preserve DynArray (UBound (DynArray) + 1) 在用 Preserve 关键字时,只能改变多维数组中最后一维的上界;如果改变了其它维或最后一维的下界,那么运行时就会出错。 所以可这样编程: ReDim Preserve Matrix (10,UBound (Matrix,2) + 1) 而不可这样编程: ReDim Preserve Matrix (UBound (Matrix,1) + 1,10) ' (编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|