FreeBasic Erase 关键字
最后修改日期:2025 年 6 月 16 日
FreeBasic 的 Erase 关键字用于清除或重置数组。它可以清空动态数组或将固定大小的数组重置为其默认值。这对于在不重新声明的情况下重用数组非常有用。
基本定义
在 FreeBasic 中,Erase 是一个操作数组的语句。对于动态数组,它会释放内存并将数组设置为零个元素。对于固定数组,它会将所有元素重置为其默认值。
Erase 语句有助于高效地管理内存,并提供一种干净的方式来重置数组内容。当处理需要定期清除的大型数组时,它特别有用。
清空动态数组
本示例演示了如何清空动态数组,释放其内存。
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 个元素。尝试在清空后访问元素会引发错误,因为数组不再存在。
清空固定大小数组
本示例演示了清空固定大小数组。
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 语句也适用于多维数组。
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 也适用于用户定义类型的数组。
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 语句清空多个数组。
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
本示例展示了如何使用一个语句清空三个不同的数组。固定数组会保留其大小但会被重置,而动态数组则会被完全释放。逗号分隔的语法可以一次性高效地清空多个数组。
清空和重用动态数组
这演示了带清空操作的动态数组的完整生命周期。
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"
这展示了如何清空动态数组,然后用不同的维度重用它。最终清空后,尝试访问数组会引发错误,这表明它已被真正释放。安全地访问数组需要错误处理。
最佳实践
- 内存管理:完成后务必清空动态数组以释放内存。
- 固定数组:使用 erase 来重置内容,而不是手动循环。
- 错误处理:清空动态数组后检查数组边界。
- 性能:对于大型数组,清空比手动清除更快。
- 重用:清空并重新调整动态数组的大小,而不是重新声明。
本教程涵盖了 FreeBasic 的 Erase 关键字,并通过实际示例展示了其在不同数组类型和场景中的用法。