ZetCode

FreeBasic LBound 和 UBound 关键字

最后修改日期:2025 年 6 月 16 日

FreeBasic 的 LBoundUBound 关键字用于确定数组的下界和上界。这些函数对于处理未知大小或可变大小的数组至关重要。

基本定义

LBound 返回数组维度的最小有效索引(下界)。UBound 返回数组维度的最大有效索引(上界)。

这两个函数都将数组作为第一个参数,并将可选的维度号作为第二个参数。对于一维数组,可以省略维度参数。

基本数组边界

本示例展示了 LBound 和 UBound 与一维数组的最简单用法。

basic_bounds.bas
Dim numbers(1 To 5) As Integer

Print "Lower bound: "; LBound(numbers)
Print "Upper bound: "; UBound(numbers)

我们声明一个具有显式边界从 1 到 5 的数组。LBound 返回 1,UBound 返回 5。这些函数有助于在数组边界可能发生变化时使代码更具灵活性。

默认数组边界

在未显式指定时,FreeBasic 数组具有默认边界。

default_bounds.bas
Dim values(5) As Double

Print "Default lower bound: "; LBound(values)
Print "Default upper bound: "; UBound(values)

当未指定边界时,FreeBasic 将 0 用作默认的下界。此数组的索引从 0 到 5。请始终检查边界,以避免代码中出现“越界”错误。

多维数组

LBound 和 UBound 通过指定维度来处理多维数组。

multi_dimension.bas
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 对于大小会变化的动态数组尤其有用。

dynamic_array.bas
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 可以使数组遍历更健壮、更易于维护。

array_iteration.bas
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 可与传递给函数和过程的数组一起使用。

function_parameters.bas
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 可以帮助检测未初始化或空数组。

empty_array.bas
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 之前,请始终先定义数组。

最佳实践

本教程介绍了 FreeBasic 的 LBoundUBound 关键字,并提供了实际示例,展示了它们在不同场景下的用法。

作者

我的名字是 Jan Bodnar,我是一名热情的程序员,拥有丰富的编程经验。我自 2007 年以来一直在撰写编程文章。迄今为止,我已撰写了 1,400 多篇文章和 8 本电子书。我在编程教学方面拥有十多年的经验。

列出所有 FreeBasic 教程