FreeBASIC マニュアルのトップに戻る

FreeBASIC 動的配列

目次→教本→いっしょに学ぼうDynamic Arrays←オリジナル・サイト

動的配列 左にメニュー・フレームが表示されていない場合は、ここをクリックして下さい

←リンク元に戻る プログラム開発関連に戻る

このページでは、FreeBASIC の動的配列の適切な使用について説明します。
これは簡単なチュートリアルです。多くの人々が、動的配列で苦労をしているので、私は、これを、「始める前の教本」のページに置く価値があると感じました。

配列は、整っています。
配列は、プログラムを通して、使えるし、リサイズできます。ただ、少し難しさがあります。
まず第一に、私たちは、動的配列を作成する、二つの方法について、議論します。
同じコードの中で、Sub や function の、Dynamic Shared 配列を再定義 する方法を説明するつもりです。
コードの中のコメントを読んで、よく理解してください。

Declare Sub mySub ()

' V 0.17 では、OPTION DYNAMIC と '$DYNAMIC は不要です。
' あなたは、その都度、配列を動的になるように定義しなければなりません。

' お分かりのように、次の両方の方法を使うと、動的な配列をうまく作成できます
Dim Shared myArray1() As UByte
ReDim Shared myArray2(0) As UByte

mySub

' 配列を共有したので、配列は、モジュールのどこからでも、アクセスできます
Print myArray1(5) ' 2 を表示します
Print myArray2(6) ' 3 を表示します
Sleep

Sub mySub ()

    ' sub か function の中で "redim shared" を使用しないでください!
    ' 配列が共有されていても、"shared" という言葉を省略しなければなりません'

    ReDim myArray1(0 To 9) As UByte
    ReDim myArray2(0 To 9) As UByte
    myArray1(5) = 2
    myArray2(6) = 3
End Sub


今、あなたは、PRESERVE キーワードを使っているとき、どうやって配列を再定義できるか、疑問に思うかもしれません。
REDIM のための構文に記述されているように、単に PRESERVE を加えるだけです。
しかし実際、これは、最初の配列の寸法が、ただ一度の変更の場合にだけ、働きます!
例えば、下のプログラムは、適切に動作しないでしょう:
' 動的配列を、クリーンな方法で宣言します
ReDim Shared myArray(0 To 9, 0 To 9) As UByte
Dim As UByte x, y, i

' 配列に値を満たします
For y = 0 To 9
    For x = 0 To 9
        i += 1
        myArray(x, y) = i
    Next x
Next y

' 元の値は良いことを検証します:
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

' 配列を再定義します
ReDim Preserve myArray(0 To 18, 0 To 12) As UByte

' 値は適切に保持されていません !
For y = 0 To 9
    For x = 0 To 9
        Print Using "##,"; myArray(x, y);
    Next x
    Print
Next y

Sleep
End


これを十分に試してみてください!
あなたは、これが適切に働かないことを確認できます。
これは配列の最初の寸法だけが、サイズを変えるからです。PRESERVE が適切に扱うように、残りは同じサイズのままで残っています。

回避方法があります。私は、将来、それを掲示するつもりです。私のプログラムだけでなく、どんなプログラムにも使えるように編集して、それが区域外に行かないように、いくつかの改正をした後にです。
さしあたり、創造的になってください;)

いっしょに学ぼう に戻る
←リンク元に戻る プログラム開発関連に戻る

最後、Sancho3 によるレビュー(2018年2月06日)

ページ歴史:2018-02-07 00:44:03
日本語翻訳:WATANABE Makoto、原文著作者:SephKnows

ホームページのトップに戻る

表示-非営利-継承