ZetCode

FreeBasic Erase 关键字

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

FreeBasic 的 Erase 关键字用于清除或重置数组。它可以清空动态数组或将固定大小的数组重置为其默认值。这对于在不重新声明的情况下重用数组非常有用。

基本定义

在 FreeBasic 中,Erase 是一个操作数组的语句。对于动态数组,它会释放内存并将数组设置为零个元素。对于固定数组,它会将所有元素重置为其默认值。

Erase 语句有助于高效地管理内存,并提供一种干净的方式来重置数组内容。当处理需要定期清除的大型数组时,它特别有用。

清空动态数组

本示例演示了如何清空动态数组,释放其内存。

erase_dynamic.bas
Dim numbers() As Integer
ReDim numbers(5)

For i As Integer = 0 To 5
    numbers(i) = i * 10
Next

Print "Before erase:"
Print "Array size: "; UBound(numbers) - LBound(numbers) + 1

Erase numbers

Print "After erase:"
Print "Array size: "; UBound(numbers) - LBound(numbers) + 1

在这里,我们创建了一个动态数组,用值填充它,然后将其清空。清空后,数组将包含 0 个元素。尝试在清空后访问元素会引发错误,因为数组不再存在。

清空固定大小数组

本示例演示了清空固定大小数组。

erase_fixed.bas
Dim colors(4) As String
colors(0) = "red"
colors(1) = "green"
colors(2) = "blue"

Print "Before erase:"
For i As Integer = 0 To 4
    Print i; ": "; colors(i)
Next

Erase colors

Print "After erase:"
For i As Integer = 0 To 4
    Print i; ": "; colors(i)
Next

清空后,固定数组会保留其大小,但所有元素都会被重置为空字符串(对于字符串数组)或零(对于数字数组)。这与动态数组的完全释放不同。

清空多维数组

Erase 语句也适用于多维数组。

erase_multidimensional.bas
Dim matrix(2, 2) As Integer

' Fill matrix
For i As Integer = 0 To 2
    For j As Integer = 0 To 2
        matrix(i, j) = i * 3 + j + 1
    Next
Next

Print "Before erase:"
For i As Integer = 0 To 2
    For j As Integer = 0 To 2
        Print matrix(i, j); " ";
    Next
    Print
Next

Erase matrix

Print "After erase:"
For i As Integer = 0 To 2
    For j As Integer = 0 To 2
        Print matrix(i, j); " ";
    Next
    Print
Next

本示例创建了一个 3x3 的矩阵,用值填充它,然后将其清空。清空后,所有元素都重置为 0。数组的维度保持不变,只有内容被清除。

清空用户定义类型的数组

Erase 也适用于用户定义类型的数组。

erase_udt.bas
Type Person
    name As String
    age As Integer
End Type

Dim people(2) As Person

people(0).name = "Alice"
people(0).age = 25
people(1).name = "Bob"
people(1).age = 30

Print "Before erase:"
For i As Integer = 0 To 2
    Print people(i).name; " "; people(i).age
Next

Erase people

Print "After erase:"
For i As Integer = 0 To 2
    Print people(i).name; " "; people(i).age
Next

清空后,用户定义类型的所有字段都会重置为其默认值。字符串变为空,数字变零,任何嵌套类型也会被类似地重置。

清空多个数组

您可以使用单个 Erase 语句清空多个数组。

erase_multiple.bas
Dim a(5) As Integer
Dim b(3) As String
Dim c() As Double
ReDim c(4)

' Fill arrays
For i As Integer = 0 To 5
    a(i) = i
Next

For i As Integer = 0 To 3
    b(i) = "Item " & i
Next

For i As Integer = 0 To 4
    c(i) = i * 1.5
Next

Erase a, b, c

Print "Array sizes after erase:"
Print "a: "; UBound(a) - LBound(a) + 1
Print "b: "; UBound(b) - LBound(b) + 1
Print "c: "; UBound(c) - LBound(c) + 1

本示例展示了如何使用一个语句清空三个不同的数组。固定数组会保留其大小但会被重置,而动态数组则会被完全释放。逗号分隔的语法可以一次性高效地清空多个数组。

清空和重用动态数组

这演示了带清空操作的动态数组的完整生命周期。

erase_reuse.bas
Dim values() As Integer

' First allocation
ReDim values(10)
For i As Integer = 0 To 10
    values(i) = i * 2
Next
Print "First size: "; UBound(values)

' Erase and reuse
Erase values
ReDim values(5)
For i As Integer = 0 To 5
    values(i) = i * 3
Next
Print "Second size: "; UBound(values)

' Final erase
Erase values
Print "Final size: ";
On Error Goto error_handler
Print UBound(values)
Exit Sub

error_handler:
Print "Error: Array not allocated"

这展示了如何清空动态数组,然后用不同的维度重用它。最终清空后,尝试访问数组会引发错误,这表明它已被真正释放。安全地访问数组需要错误处理。

最佳实践

本教程涵盖了 FreeBasic 的 Erase 关键字,并通过实际示例展示了其在不同数组类型和场景中的用法。

作者

我的名字是 Jan Bodnar,我是一名充满热情的程序员,拥有丰富的编程经验。我从 2007 年开始撰写编程文章。迄今为止,我已撰写了 1400 多篇文章和 8 本电子书。我在教授编程方面拥有十多年的经验。

列出所有 FreeBasic 教程