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

FreeBASIC DevArrays

目次→FreeBASIC のハッキング→FreeBASIC でのハッキングのための情報Arrays←オリジナル・サイト

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

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

fbc の配列は、要素の集合であり、各要素は同じ型を持ち、配列には添え字でアクセスします。

例:
    '' one dimensional array (1 index)
    Dim a(1 To 10) As Integer
    Print a(1)  '' first element (integer)
    Print a(10) '' last element (integer)

    '' two dimensional array (2 indexes)
    Dim b(1 To 2, 1 To 5) As Integer
    Print b(1,1) '' first element (integer)
    Print b(2,5) '' last element (integer)


配列の次元と範囲

次元数は、配列の要素にアクセスするために必要な、添え字の数を指します。
次元の数は、宣言の一部である場合とそうでない場合があります。
コンパイル時に、配列が使われる範囲内での次元数が分かっていると、fbc は、間違った数の添え字が指定されていると、チェックしてエラーを出すことができます。

配列の境界は、各次元で許容される、最小および最大の添え字の値です。
次元の配列境界の外側にある 1つまたは複数の添え字を持つ、配列要素へのアクセスは、未定義の動作です。

fbc は、 '-exx' や '-earray' コンパイル・オプションを使ってコンパイルしたときに、1つまたは複数の添え字(アクセス)が配列の境界外にある場合、チェック・エラーを実行できます。
配列境界がコンパイル時定数で、そして、配列アクセスがコンパイル時定数なら、fbc は、コンパイル時に、配列アクセスが配列の境界外にあるかどうかを確認できます。
そうでなくて、境界かアクセスのいずれかが一定でないなら、配列の境界チェックを、実行時に行う必要があります。

固定の次元と未知の次元

次元の数は、固定されている場合と不明な場合があります。
fbc は、配列の宣言に基づいて、配列が持つと予想される次元数を決定しようとします。
fbc が、コンパイル時に次元数を決定できない場合、次元数は、実行時に配列の最初の再次元化で固定されます。

例: 固定2次元、動的境界
Dim a(Any, Any) As Integer
ReDim a(1 To 2, 1 To 5)


例: 動的な次元、動的な境界
Dim a() As Integer

'' then only one of on first time use ...
ReDim a(1 To 10)
ReDim a(1 To 2, 1 To 5)
ReDim a(1 To 2, 1 To 5, 1 To 3)


配列のスコープ内で、次元数が fbc に認識されると、次元数が間違っているエラーにアクセスすると、fbc はエラーになります。
または、手続きに引数として渡され、サイズ変更される配列のように、コンパイル時に次元数が不明な場合、次元数は実行時に固定されます。

固定境界と動的境界

固定長配列は、コンパイル時に既知の配列境界が決まっている配列です。
動的(または可変長)配列は、実行時に配列境界を変更およびサイズ変更でき、コンパイル時に境界は不明と見なされます。

例: 固定(定数)境界と定数アクセス
Dim a(1 To 10) As Integer
Print a(11) '' compile time array out-of-bounds


例: 固定境界および非定数アクセス
Dim a(1 To 10) As Integer
Dim i As Integer
Print a(i) '' run time array out-of-bounds


例: 動的境界
Dim a(Any) As Integer '' 1 dimensional, empty
ReDim a(1 To 10)      '' resized to 10 elements
Print a(11) '' run time array out-of-bounds
Print a(i)  '' run time array out-of-bounds


静的配列と動的配列

配列には、静的と動的のメモリ割り当てがあります。
記述子は、静的と動的の場合があり、データのメモリ空間は、静的と動的の場合があります。
静的・動的という用語は過度に使われる可能性があり、配列を記述するときに意味がない場合があります。
この文脈では、静的と動的を、固定長と可変長と混同しないでください。
この文脈では、配列記述子とそれに関連するデータが、メモリ内でどのように、どこで割り当てられるか、そして変数の寿命の程度を指します。

配列記述子を有効にするには、初期化する必要があります。
初期化されていない配列記述子は、ほぼ確実に実行時に未定義の動作を引き起こします。

配列記述子自体は、配列の宣言に応じて、スタックかヒープの .bss、.data、に割り当てられます。
通常、配列記述子は、使用できるように通常ゼロ以外のデフォルト値に初期化する必要があるため、通常は .bss セクションにはありません。

配列のデータは、配列の宣言に応じて、スタックかヒープの .bssセクション、.dataセクション、に配置されます。
fbc の現在の実装では、可変長配列の配列データは、常にヒープに割り当てられます(つまり、malloc())。

配列記述子

参照: FBARRAY (配列記述子の構造とアクセス).

FreeBASIC の開発者用情報 に戻る
目次に戻る
←リンク元に戻る プログラム開発関連に戻る

ページ歴史:2019-11-18 00:46:54
日本語翻訳:WATANABE Makoto、原文著作者:JeffMarshall

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

表示-非営利-継承