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

FreeBASIC ProPgVarLenArrays

目次→実行時ライブラリー参考→プログラマーのための案内Variable-length Arrays←オリジナル・サイト

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

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

要素数を変更できる、同種のデータ構造。動的配列ともいう。

概要
可変長配列は、プログラムの実行中に、要素数を拡大・縮小と変更したり、次元の添え字の範囲を変更できる 配列 です。
可変長配列が、その要素を格納するために用いるメモリは、実行時に、空いている保管場所(heap : 自由に利用できるメモリ)内に割り当てられます。
これは、固定長配列と対照的です。固定長配列では、データは、プログラム・スタック上か、実行可能ファイルの、.BSS.DATA セクションに割り当てられます。 状況は、 Static (あるいは Shared) で定義されたかどうかによって異なります。

可変長の配列は、ユーザー定義型 の内側のデータ・メンバーとしても使われます。
しかし、固定長配列とは対照的に、配列はユーザー定義型の構造の一部としては、割り当てられません。ユーザー定義型は、可変長であるはずがないからです。
その代わりに、ユーザー定義型は、配列記述子を含むだけです。配列記述子は、舞台裏で可変長の配列を持って、アクセスするために用いられます。そして、配列は、まだ空いている保管場所(heap : 自由に利用できるメモリ)に割り当てられます。可変長配列変数と同様にです。

可変長配列は、しばしば「動的配列」と呼ばれます。配列のサイズが、固定のサイズではなくて、実行時に動的に変わることができるからです。

宣言
可変長の配列は、DimRedim キーワードで宣言されます。 そして、変数名、境界括弧に入れられたリスト、要素のデータ型 が続きます。
可変長と宣言された配列のために、配列は未知の境界、または、可変的な(非定数の)境界で宣言されなければなりません。
Redim は、常に可変長の配列を定めます。指定された境界が、定数であるかどうかにかかわらずです。

'' 一次元の可変長配列を宣言します。整数で最初に2つの要素(0 と 1)
ReDim a(0 To 1) As Integer

'' 1-次元の可変長配列を最初の境界なしで宣言します。
'' この配列は、初めて使う前に、Redim を用いて大きさを変更しなければなりません。
Dim b(Any) As Integer

'' 同様、ただし 2-次元
Dim c(Any, Any) As Integer

Dim myLowerBound As Integer = -5
Dim myUpperBound As Integer = 10

'' 1-次元の可変長配列を、変数(非定数)境界を指定して宣言します。
'' 配列は、myUpperBound - myLowerBound + 1 の要素を持ちます。
Dim d(myLowerBound To myUpperBound) As Integer

'' 可変長配列を、次元の量は最初の Redim あるいは配列アクセスで見つけて決定するように宣言します。
'' 配列は、最初の境界を持っておらず、
'' 初めてそれを使う前に、Redim を使ってサイズ変更しなければなりません。
Dim e() As Integer



大きさを変更する(Resizing)
可変長配列の大きさを変更することは、その添え字の異なる値の範囲で、配列を「再定義する」ことを指します。そして、配列は、成長するか、縮むことができます。
新しい添え字の範囲から外れる要素は、消去されます。オブジェクト要素は破壊されます。
配列を、より大きなサイズに変更するときは、新しい要素はゼロまたは null 値で初期化されて加えられます。オブジェクト要素は、デフォルトで構築されます。
可変長配列は、予約語 Redim を使って、宣言時と同じ形で、大きさを変更します。この場合、要素データ型は、Redim 命令文で省略することができます。

'' SINGLE 要素の、空の1次元の可変長配列を定めます...
Dim array(Any) As Single

'' 配列の大きさを、10 の SINGLE 要素を持つように、変更します..
ReDim array(0 To 9) As Single

'' 大きさを変更するとき、データ型は省略できます:
ReDim array(10 To 19)



配列のサイズ変更は、各次元の境界を変更するだけでなく、次元の量そのものも変更することができます。

デフォルトで、可変長配列の大きさを変更するとき、要素の値は失われます。
リサイズで、前の要素の値を保持するためには、予約語 Preserve を使います。

参考:
プログラマーのための案内に戻る
←リンク元に戻る プログラム開発関連に戻る
ページ歴史:2021-12-09 13:16:33
日本語翻訳:WATANABE Makoto、原文著作者:LaananFisher

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

表示-非営利-継承