Skip to content

可变长数组 (Variable-length Arrays)


可调整大小的同类数据结构,也称为"动态数组"。

概述

可变长数组是可以在程序执行期间调整大小以容纳更多或更少元素,或让其维度使用不同下标范围的数组。可变长数组用于存储元素的内存在堆上运行时分配,与固定长度数组不同——固定长度数组的数据分配在程序栈上或可执行文件的 .BSS.DATA 段中(具体取决于是否使用 StaticShared 定义)。

可变长数组也可以用作用户自定义类型内的数据成员。与固定长度数组不同,数组不会作为用户自定义类型结构的一部分被分配,因为用户自定义类型不能是可变长度的。相反,用户自定义类型只包含 FreeBASIC 在幕后用于管理可变长数组数据的数组描述符结构,数组仍然在堆上分配,与可变长数组变量相同。

可变长数组通常称为"动态数组",因为它们的大小可以在运行时动态变化,而不是固定大小。

声明

可变长数组使用 DimRedim 关键字声明,后跟变量标识符、括号中的边界列表和元素数据类型。要将数组声明为可变长,必须用未知边界或变量(非常量)边界来声明它。Redim 始终定义可变长数组,无论指定的边界是否为常量。

start GeSHi

vb
'' 声明一个一维可变长整型数组,初始包含 2 个元素(索引 0 和 1)
ReDim a(0 To 1) As Integer

'' 声明一个一维可变长数组,不设初始边界。
'' 首次使用前必须通过 Redim 调整大小。
Dim b(Any) As Integer

'' 同上,但为二维数组
Dim c(Any, Any) As Integer

Dim myLowerBound As Integer = -5
Dim myUpperBound As Integer = 10

'' 通过指定变量(非常量)边界来声明一维可变长数组。
'' 数组将包含 myUpperBound - myLowerBound + 1 个元素。
Dim d(myLowerBound To myUpperBound) As Integer

'' 声明一个可变长数组,其维度数量由第一条 Redim 或数组访问语句决定。
'' 数组无初始边界,首次使用前必须通过 Redim 调整大小。
Dim e() As Integer

end GeSHi

调整大小

调整可变长数组的大小是指以不同的边界"重新定义"数组,允许数组增长或缩小。超出新下标范围的元素将被删除;对象元素将被销毁。如果数组调整为更大的大小,则新元素以零或 null 值初始化;对象元素将被默认构造。可变长数组使用与定义相同形式的 Redim 关键字调整大小。在这种情况下,元素数据类型可以从 Redim 语句中省略。

start GeSHi

vb
'' 定义一个空的一维 SINGLE 类型可变长数组...
Dim array(Any) As Single

'' 将数组大小调整为包含 10 个 SINGLE 类型元素...
ReDim array(0 To 9) As Single

'' 调整大小时可以省略数据类型:
ReDim array(10 To 19)

end GeSHi

调整数组大小不能改变其维度数量,只能改变每个维度的边界。

默认情况下,调整大小时可变长数组的元素值会丢失。要在调整大小时保留以前的元素值,使用 Preserve 关键字。

参见

返回 目录

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