vb 如何定义一个未知大小一维数组?

我是这样定义 dim a(100) as string,但是经常性出现下标越界,又不想定义的范围太大,就想问下可不可以定义一个自适应的一维数组?

动态数组

 

数组到底应该有多大才合适,有时可能不得而知。所以希望能够在运行时具有改变数组大小的能力。

动态数组就可以在任何时候改变大小。在 Visual Basic 中,动态数组最灵活、最方便,有助于有效管理内存。例如,可短时间使用一个大数组,然后,在不使用这个数组时,将内存空间释放给系统。

如果不用动态数组,就要声明一个数组,它的大小尽可能达到最大,然后再抹去那些不必要的元素。但是,如果过度使用这种方法,会导致内存的操作环境变慢。

要创建动态数组,请按照以下步骤执行: 

    (如果希望数组为公用数组,则)用 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)

详细信息 关于动态数组的更详细信息,请参阅语言参考中的“ReDim 函数”。关于对象数组,请参阅“用对象编程”。

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-09-28
可以的,先定义一个动态数组:dim a() as string
到使用的地方,再重定义上下限:
n=15
redim a(1 to n) ',当然,n 在重定义前就要确定
如果a中放了数据了,还要增加上限,还可以用 ReDim Preserve 语句来扩充数组:
a(15)=15
ReDim Preserve a(UBound(a) + 10) '只增加上限,不改变元素值本回答被提问者和网友采纳
第2个回答  2015-09-22
dim a() as string
括号内不用写数,系统就默认为一维数组,如果串口通讯时,不知发送多少字节,直接写数组名就可以,如果在某处知道大小,可以使用redim a(0 to X) as string就可以了。
第3个回答  推荐于2017-10-02
Dim arr() as Integer
Dim size as Integer
size=5
Redim arr(1 to size)
也就是一开始只是声明一个变量,等到“知道”或者"应该知道"的时候用Redim重新定义其大小,这个例子中用了一个变量size,size可以根据实际情况设置,比如班级人数存在student变量中,就让size=sutdent,然后数组大小就确定了
第4个回答  2012-12-09
使用动态数组。
你最好把你的程序要求数组的情况介绍一下,我举几个一开始数组大小不知道的例子:
1,要读取文本文件,文本文件有若干行数据。但是需要筛选这些数据,满足的就存放到数组里。
Dim D() As String
Dim LineStr As String
Dim n as integer
n = 0
'读取文件信息
Open App.Path & "\文本文件.txt" For Input As #1 '以读的方式打开文件
Do While Not EOF(1) ' 循环至文件尾

Line Input #1, LineStr
if LineStr满足条件 Then
n = n + 1
ReDim Preserve D(1 To n) As String
D(n) = LineStr
End If
Loop

Close #1 ' 关闭文件。
2,类似的从数据库里读取数据。
算法很类似读取文本文件,就不赘述了。
3,寻找1000以内素数,找到就存放到数组D里。
Dim D() As String
Dim n as integer

Dim i as integer
n = 0
for i = 2 To 1000
If i 是素数 Then
n = n + 1
ReDim Preserve D(1 To n) As String
D(n) = i
End If
Next i
相似回答