Skip to content

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 总是生成可变长度数组。

定义新的可变长度数组时,其元素将被默认构造。对于 IntegerDouble 等简单数据类型,元素初始化为零(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             0
vb
' 将可变长度数组定义为 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 中的多维数组采用行优先顺序,而非列优先顺序。

参见

基于 FreeBASIC 官方文档翻译 如有侵权请联系我们删除
FreeBASIC 是开源项目,与微软公司无隶属关系