您好,本页介绍了FreeBASIC中动态数组的正确使用。虽然这不是一个很长的教程,但很多人都遇到了一些麻烦,我觉得值得参加“入门”教程页面。
数组是整齐的他们可以在整个程序中使用和调整大小,几乎没有困难。首先,我们应该讨论一种可以创建动态数组的方法。在相同的代码中,我将解释如何在子或函数中重新定义动态共享数组。阅读代码中的意见,以更好地了解它。
Declare Sub mySub ()
' as of 0.17, OPTION DYNAMIC and '$DYNAMIC are unecessary. you must define an array to be dynamic each time
' as you can see, both following ways are successful at creating a dynamic array
Dim Shared myArray1() As UByte
ReDim Shared myArray2(0) As UByte
mySub
' because we shared the arrays, they are accessable from anywhere within the module
Print myArray1(5) ' will print 2
Print myArray2(6) ' will print 3
Sub mySub ()
' do NOT use "redim shared" within a sub or function! even if it is shared, you must omit the word "shared" for it to work
ReDim myArray1(0 To 9) As UByte
ReDim myArray2(0 To 9) As UByte
myArray1(5) = 2
myArray2(6) = 3
End Sub
现在,您可能会想知道如何在使用PRESERVE关键字时重新定义数组。通常,您只需将PRESERVE添加为REDIM将声明的语法。然而事实上,这只有在第一个数组维度是唯一的变化时才起作用!例如,以下程序将无法正常工作:
' declare the dynamic array the cleaner way
ReDim Shared myArray(0 To 9, 0 To 9) As UByte
Dim As UByte x, y, i
' fill the array with values
For y = 0 To 9
For x = 0 To 9
i += 1
myArray(x, y) = i
Next x
Next y
' proves the values are good originally:
For y = 0 To 9
For x = 0 To 9
Print Using "##,"; myArray(x, y);
Next x
Print
Next y
Print
Print "Press a key..."
Sleep
Cls
' redimension the arrays
ReDim Preserve myArray(0 To 18, 0 To 12) As UByte
' the values have not been preserved properly!
For y = 0 To 9
For x = 0 To 9
Print Using "##,"; myArray(x, y);
Next x
Print
Next y
Sleep
End
试试看!你可以看到它不能正常工作。这是因为只有数组中的第一个维度可能会改变大小,而其余的维度保持不变,才能使PRESERVE正常工作。
有一个解决方法,我稍后会发布,在我编辑之后,为了使任何程序,而不仅仅是我的,并做一些修改,使其不会超出界限。暂时获得创意;)