您现在的位置:首页 >> 网络教学 >> 数组 >> 内容

动态数组

时间:2009-6-19 8:46:24 点击:2805

 动态数组

一、动态数组的概念

声明数组的目的是为数组开辟所需的内存区域。前面用Dim 语句声明数组时,都同时确定维数和下标,VB编译程序在编译时为它们分配了相应的存储空间,并且在应用程序运行期间内,数组都占有这块内存区域,这样的数组称为定长数组。当数据规模可以预知时,使用定长数组能够增加程序的可读性和提高程序的执行效率。但有时候,数组该声明为多大,需要在程序运行时才能决定。虽然可以通过声明一个“足够大”的定长数组来满足数据规模的需要,但显然是不经济的。动态数组提供了一种灵活有效的内存管理机制,它在声明时没有给定数组大小(即省略了括号中的下标),能够在程序运行的任何时候用ReDim语句改变数组的大小。使用动态数组的优点是根据用户需要,有效地利用存储空间,它是在程序执行到redim语句时才分配存储单元,而静态数组是在程序编译时分配存储单元。

创建动态数组分两步:

(i)    说明一个不带下标参数的动态数组。

例如:Dim dynA () As Integer

(ii)数组操作前用ReDim语句分配数组的元素个数,称为数组重定义。在程序运行中,当执行到ReDim语句时,就把新的上下界重新分配给数组,数组元素的值将被初始化,所有的数值元素的值被置为0,字符串元素被置为空字符串。其使用格式如下:

ReDim Preserve数组名 (下标)[As(类型)]

说明:

1)下标可以是常量,也可以是具有确定值的变量,其格式与Dim语句相同。

2ReDim语句只能用于动态数组,它可以改变每一维的大小,但不能改变维数。

3)在同一程序中,ReDim语句可以多次使用。

4)重新指定数组长度时,数组内原有的数据降会被清除。如果想想保留数组原有数据,需要加上“Preserve”关键字。但Preserve只能改变最后一维的大小,前面几维不能改变。

5ReDim语句只能出现在过程中。

例如:ReDim Preserve dynA(x+1)

当不需要再使用某个动态数组时,可以使用“Erase”删除该数组,以释放该数组占用的内存空间,例如:Erase a()

二、动态数组的应用

[5-8]在窗体上输出如图5-6所示的杨辉三角。

5-6 杨辉三角

杨辉三角的第n行元素,是二项式

展开式的系数。n的值决定了系数的个数。杨辉三角形是一个二维图形,其特点是两个腰上的数都为1,其他位置上的数是它的上一行相邻两个数之和。由于它的每一行都是在上一行的基础上计算出来的,可以用一维数组进行迭代。每一次迭代数组都将增加一个元素,所以程序使用了动态数组Yh。又因为每一次迭代都覆盖掉原来的值,故需在生成下一行之前把原来的值打印出来。

根据分析,设计程序如下:

Option Explicit

Private Sub Command1_Click()

    Const MAX = 15, POS = 20

    Dim Yh()                        ' 说明可调数组

    Dim i As Integer, j As Integer, n As Integer

    Do

        n = InputBox("Input n:")

    Loop Until n >= 1 And n <= MAX  ' 保证输入合法性

    ReDim Yh(n)                     ' 数组重定义

    Yh(1) = 1                       ' 生成第一行,也是每一行的第一列

    Print Tab(POS - 3); Yh(1)       ' 打印第一行

    For i = 2 To n

        Yh(i) = 1                   ' 生成每一行的最后一个元素

        For j = i - 1 To 2 Step -1  ' 迭代生成当前行元素

            Yh(j) = Yh(j - 1) + Yh(j)

        Next j

        For j = 1 To i              ' 输出第i

            Print Tab(POS - 3 * i + 6 * (j - 1)); Yh(j);

        Next j

    Next i

End Sub

注意:迭代生成当前行元素时,程序使用了负增量循环,对数组元素从后往前计算。请读者考虑一下,可以反过来使用正增量循环迭代吗?

三、Array 函数

给数组中的各元素赋予相同的值(如初始化时),通常用循环来实现,方便、快捷。若要对数组中各元素赋给不同的值,则可采用[5-6]中所示,通过InputBox()函数从键盘上接收等方法,但这些方法都要占用运行时间,影响效率。为此,VB提供了Array函数,利用该函数可以使数组在编译阶段(程序运行之前)赋值。

Array函数的使用可以将一个数据集读入某个数组中,其使用格式:

数组名=Array(数组元素值列表)

说明:

1)数组名是在此前声明的数组名称。

2)元素值列表与相应数组元素一一对应,各元素值之间用逗号分隔。

3)在此前对数组的声明只是变体型的动态数组。

[5-9]Array函数使用。

程序清单如下:

Private Sub Command1_Click()

    Dim varA(), i As Integer

    varA = Array(2, 3, 4, 5)

    For i = 0 To UBound(varA)

        Print varA(i);

    Next i

End Sub

程序运行结果为:2 3 4 5

作者:Admin  
  • 上一篇:静态数组
  • 下一篇:控件数组
  • 本类热门
    本类推荐
    本类固顶
    • 没有
  • VB程序设计学习网站(赣南师范学院) © 2008 版权所有 All Rights Reserved.
  • 地址:江西省赣州市经济技术开发区 赣南师范学院数学与计算机科学学院 邮政编码:341000
    Email:ZQ188@163.com 技术支持QQ:87319633 移ICP备10086号
  • GnsySjxy! V2.4