REDIM
来源: https://www.freebasic.net/wiki/wikka.php?wakka=KeyPgRedim 最后更新: 2024-06-19
声明或调整动态(可变长度)数组的大小。
语法
声明动态数组:
Redim [Shared] symbolname( subscript [, ...] ) As datatype [, ...]
Redim [Shared] As datatype symbolname( subscript [, ...] ) [, ...]调整动态数组大小:
Redim [Preserve] symbolname( subscript [, ...] ) [, ...]或:
Redim [Preserve] [ ( ] expression [ ) ] ( subscript [, ...] ) [, ...]参数
- Shared — 指定在整个模块中对数组进行共享(文件作用域)访问。
- Preserve — 当对已有数组使用时,调整大小期间将保留数组的内容。
- symbolname — 新的或已有的数组标识符。
- expression — 引用已有数组的表达式(用于调整作为 UDT 成员的数组大小)。
- subscript:
[lowerbound To] upperbound— 下界和上界范围。如果未指定,下界默认为零(0)。 - datatype — 数组中元素的类型。
描述
Redim 可用于定义新的可变长度数组,或在保持相同维数的情况下调整已有可变长度数组的大小。Redim 总是生成可变长度数组。
定义新的可变长度数组时,其元素将被默认构造。对于 Integer 或 Double 等简单数据类型,元素初始化为零(0)。对于具有默认构造函数的用户定义类型,将调用该构造函数。
Redim Preserve 注意事项
Preserve的当前行为是保持原始数据在内存中连续,只扩展或截断内存大小。- 其行为(对于单维数组)只有在更改上界时才是明确定义的。
- 对于多维数组,只有第一个维度的上界才能安全地增加。
限制
Redim不能用于固定大小数组(使用Dim并以常量为界创建的数组)。- 如果数组包含对象实例本身作为元素,则
Redim不能在成员过程中使用。
示例
vb
' 定义一个包含5个元素的可变长度数组
ReDim array(0 To 4) As Integer
For index As Integer = LBound(array) To UBound(array)
array(index) = index
Next
' 将可变长度数组调整为10个元素
' (下界应保持不变)
ReDim Preserve array(0 To 9)
Print "index", "value"
For index As Integer = LBound(array) To UBound(array)
Print index, array(index)
Next输出:
index value
0 0
1 1
2 2
3 3
4 4
5 0
6 0
7 0
8 0
9 0vb
' 将可变长度数组定义为 UDT 字段
Type UDT
Dim As Integer array(Any)
End Type
Dim As UDT u(0 To 3)
' 对于使用复杂数组表达式的 Redim 操作
' (尤其是当数组表达式本身包含括号时),
' 数组表达式必须用括号括起来
ReDim (u(0).array)(0 To 9)与QB的差异
Preserve在 Visual Basic 中有,但在 QBASIC 中没有。- FreeBASIC 中的多维数组采用行优先顺序,而非列优先顺序。