動的配列オブジェクト

動的配列

最大 4 次元の配列の宣言が可能です。動的配列(最初の角括弧ペアで値が指定されていない配列)が宣言されると、コンパイラは自動的にこのような構造の変数(動的配列オブジェクト)を作成し、適切な初期化のためのコードを提供します。

動的配列は、宣言されたブロックの視認性の領域を越えた時に、自動的に解放されます。

例:

double matrix[][10][20]; // 3 次元動的配列
ArrayResize(matrix,5);   // 最初の次元のサイズを設定する

静的配列 #

大サイズの配列の次元が明示的に指定されている場合、コンパイラは必要なメモリサイズを事前に割り当てます。このような配列は、静的配列と呼ばれています。それにもかかわらず、コンパイラは事前に割り当てられた静的バッファ(配列を格納するためのメモリの一部)に関連付けられている動的配列(オブジェクト)のために追加のメモリを割り当てます。

動的配列オブジェクトを作成するのは、この静的配列を関数にパラメータとして渡すことが必要になる可能性があるからです。

例:

double stat_array[5]; // 1 次元静的配列
some_function(stat_array);
...
bool some_function(double& array[])
 {
  if(ArrayResize(array,100)<0) return(false);
  ...
  return(true);
 }

構造体内の配列

静的配列が構造体のメンバとして宣言されている場合には、動的配列オブジェクトは作成されません。これは、Windows API で使用されるデータ構造の互換性を確保するためです。

しかし、構造体のメンバとして宣言されている静的配列も MQL5 関数に渡されることが出来ます。この場合、パラメータを渡す時に、一時オブジェクトの動的配列が作成されます。この配列は、構造体のメンバである静的配列にリンクされています。

参照

配列関数変数の初期化変数のアクセス権スコープとライフタイムオブジェクトの作成と削除