固定长度数组
- 来源: https://www.freebasic.net/wiki/wikka.php?wakka=ProPgFixLenArrays
- 最后更新: 2020-07-27
固定大小的同构数据结构。
概述
固定长度数组是在程序执行过程中大小固定不变的数组。固定长度数组用于存储其元素的内存在编译时分配,位于栈上或可执行文件的 .BSS 或 .DATA 节中,具体取决于定义时是否使用了 Static(或 Shared)。这可能允许更快的程序执行,因为数组的内存已经分配完毕,而可变长度数组的元素内存在运行时才分配。
具有_自动存储的固定长度数组,其元素分配在程序栈上,指向这些元素的指针仅在数组处于作用域内时有效。具有静态存储_的固定长度数组的元素分配在可执行文件的 .DATA 或 .BSS 节中,具体取决于定义时是否初始化,因此指向这些元素的指针在程序的整个执行过程中保持有效。任何存储类的固定长度数组都不能在程序执行过程中调整大小,只有可变长度数组才可以。
固定长度数组也可以作为用户自定义类型中的数据成员使用,在这种情况下,数组直接作为用户自定义类型结构的一部分分配。
声明
固定长度数组使用 Dim 或 Static 关键字声明,后跟变量标识符、用括号括起来的边界列表和元素数据类型。
start GeSHi
'' Defines a one-dimensional fixed-length array of type INTEGER having automatic storage.
Dim arrayOfIntegers(69) As Integer
'' Defines a one-dimensional fixed-length array of type SHORT having static storage.
Static arrayOfShorts(420) As Shortend GeSHi
有多种方式指定数组的元素数量。每个数组可以有 1 到 8 个维度。每个维度都有下界和上界。
start GeSHi
Dim a(1) As Integer '' 1-dimensional, 2 elements (0 and 1)
Dim b(0 To 1) As Integer '' 1-dimensional, 2 elements (0 and 1)
Dim c(5 To 10) As Integer '' 1-dimensional, 6 elements (5, 6, 7, 8, 9 and 10)
Dim d(1 To 2, 1 To 2) As Integer '' 2-dimensional, 4 elements: (1,1), (1,2), (2,1), (2,2)
Dim e(9, 9, 9, 9) As Integer '' 4-dimensional, 10 * 10 * 10 * 10 elementsend GeSHi
要使数组声明为固定长度,边界必须仅使用数字字面量、Const 值或 Enum 常量来指定。
start GeSHi
Const myLowerBound = -5
Const myUpperBound = 10
'' Declares a one-dimensional fixed-length array, holding myUpperBound - myLowerBound + 1 String objects.
Dim arrayOfStrings(myLowerBound To myUpperBound) As String
'' Declares a one-dimensional fixed-length array of bytes,
'' big enough to hold an INTEGER.
Dim arrayOfBytes(0 To SizeOf(Integer) - 1) As Byteend GeSHi
带初始化器的声明
固定长度数组可以在声明时通过在数组声明后跟初始化器来赋值(可变长度数组声明不能使用初始化器)。
这些初始化数组值以逗号分隔的值给出,用花括号括起来。这些初始化数组值的方法可以相互嵌套以进行复杂赋值,允许初始化任意维度的数组。
start GeSHi
'' Declare an array of 2 by 5 elements followed by an initializer
Dim array(1 To 2, 1 To 5) As Integer => {{1, 2, 3, 4, 5}, {1, 2, 3, 4, 5}}end GeSHi
任何上界都可以是省略号 "..." (3 个点)。这将导致上界根据初始化器中找到的元素数量自动设置。以这种方式使用省略号时,必须使用初始化器。
start GeSHi
'' Declare (with one ellipsis) an array of 2 by 5 elements followed by an initializer
Dim array(1 To 2, 1 To ...) As Integer => {{1, 2, 3, 4, 5}, {1, 2, 3, 4, 5}}end GeSHi
start GeSHi
'' Declare (with two ellipsis) an array of 2 by 5 elements followed by an initializer
Dim array(1 To ..., 1 To ...) As Integer => {{1, 2, 3, 4, 5}, {1, 2, 3, 4, 5}}end GeSHi
返回 目录