FreeBasic LBound 和 UBound 关键字
最后修改日期:2025 年 6 月 16 日
FreeBasic 的 LBound 和 UBound 关键字用于确定数组的下界和上界。这些函数对于处理未知大小或可变大小的数组至关重要。
基本定义
LBound 返回数组维度的最小有效索引(下界)。UBound 返回数组维度的最大有效索引(上界)。
这两个函数都将数组作为第一个参数,并将可选的维度号作为第二个参数。对于一维数组,可以省略维度参数。
基本数组边界
本示例展示了 LBound 和 UBound 与一维数组的最简单用法。
Dim numbers(1 To 5) As Integer Print "Lower bound: "; LBound(numbers) Print "Upper bound: "; UBound(numbers)
我们声明一个具有显式边界从 1 到 5 的数组。LBound 返回 1,UBound 返回 5。这些函数有助于在数组边界可能发生变化时使代码更具灵活性。
默认数组边界
在未显式指定时,FreeBasic 数组具有默认边界。
Dim values(5) As Double Print "Default lower bound: "; LBound(values) Print "Default upper bound: "; UBound(values)
当未指定边界时,FreeBasic 将 0 用作默认的下界。此数组的索引从 0 到 5。请始终检查边界,以避免代码中出现“越界”错误。
多维数组
LBound 和 UBound 通过指定维度来处理多维数组。
Dim matrix(1 To 3, 1 To 4) As Integer Print "First dimension bounds:" Print "LBound: "; LBound(matrix, 1) Print "UBound: "; UBound(matrix, 1) Print "Second dimension bounds:" Print "LBound: "; LBound(matrix, 2) Print "UBound: "; UBound(matrix, 2)
此二维数组的每个维度都有不同的边界。第二个参数指定要检查哪个维度。维度编号从 1 开始,表示第一个维度。
动态数组
LBound 和 UBound 对于大小会变化的动态数组尤其有用。
Dim dynamicArray() As String ReDim dynamicArray(5 To 10) Print "Initial bounds:" Print LBound(dynamicArray), UBound(dynamicArray) ReDim Preserve dynamicArray(5 To 15) Print "After resize:" Print LBound(dynamicArray), UBound(dynamicArray)
该数组最初的维度是从 5 到 10,然后调整到 5 到 15。LBound 和 UBound 会自动反映这些更改。这可以防止在代码中硬编码数组大小。
遍历数组
使用 LBound 和 UBound 可以使数组遍历更健壮、更易于维护。
Dim fruits(3 To 7) As String
fruits(3) = "Apple"
fruits(4) = "Banana"
fruits(5) = "Cherry"
fruits(6) = "Date"
fruits(7) = "Elderberry"
For i As Integer = LBound(fruits) To UBound(fruits)
Print fruits(i)
Next
此循环可正确运行,而不管数组的下界和上界如何。如果数组边界稍后发生更改,循环仍可正常工作,无需修改。这比硬编码的循环限制更可靠。
函数参数
LBound 和 UBound 可与传递给函数和过程的数组一起使用。
Sub PrintArrayBounds(arr() As Integer)
Print "Array bounds in function:"
Print LBound(arr), UBound(arr)
End Sub
Dim testArray(10 To 20) As Integer
PrintArrayBounds(testArray)
该函数可以正确报告所传递数组的边界。这使得函数可以处理具有任意边界的数组。数组边界信息在传递给函数时会得到保留。
检查空数组
LBound 和 UBound 可以帮助检测未初始化或空数组。
Dim emptyArray() As Integer On Error Goto ErrorHandler Print "Lower bound: "; LBound(emptyArray) Print "Upper bound: "; UBound(emptyArray) Exit Sub ErrorHandler: Print "Array is not dimensioned"
尝试获取未定义数组的边界会导致错误。这可以用来检查数组是否已初始化。在对数组使用 LBound/UBound 之前,请始终先定义数组。
最佳实践
- 始终使用: 优先使用 LBound/UBound,而不是硬编码数组边界。
- 维度检查: 在使用数组之前验证数组是否已定义。
- 循环变量: 对循环计数器使用与数组索引相同的类型。
- 函数参数: 为函数记录预期的数组边界。
- 错误处理: 在关键代码中包含对数组边界的检查。
本教程介绍了 FreeBasic 的 LBound 和 UBound 关键字,并提供了实际示例,展示了它们在不同场景下的用法。