変数の初期化

変数は、定義時に初期化することが出来ます。変数が明示的に初期化されていない場合、格納された値は予知出来ません。暗黙的な初期化は使用されません。

グローバルまたは静的変数は対応する型の定数または定数式のみで初期化することが出来ます。ローカル変数は定数だけではなく任意の式で初期化することが出来ます。

グローバル変数と静的変数の初期化は一度だけ実行されます。ローカル変数の初期化は、対応する関数を呼び出すたびに行われます。

例:

int    n       = 1;
string s       = "hello";
double f[]     = { 0.0, 0.236, 0.382, 0.5, 0.618, 1.0 };
int    a[4][4] = { {1, 1, 1, 1}, {2, 2, 2, 2}, {3, 3, 3, 3}, {4, 4, 4, 4 } };
//--- テトリスから
int    right[4]={WIDTH_IN_PIXELS+VERT_BORDER,WIDTH_IN_PIXELS+VERT_BORDER,
                WIDTH_IN_PIXELS+VERT_BORDER,WIDTH_IN_PIXELS+VERT_BORDER};
//--- 構造体の全てのフィールドをゼロで初期化する
MqlTradeRequest request={};

配列要素の値のリストは、中括弧で囲む必要があります。初期化シーケンスがない場合、値は 0 だと見なされます。初期化シーケンスは、少なくとも 1 つの値を持っている必要があります。

初期化された配列のサイズが指定されていない場合は、コンパイラが初期化シーケンスのサイズに基づいて決定します。

例:

struct str3
 {
  int               low_part;
  int               high_part;
 };
struct str10
 {
  str3              s3;
  double            d1[10];
  int               i3;
 };
void OnStart()
 {
  str10 s10_1={{1,0},{1.0,2.1,3.2,4.4,5.3,6.1,7.8,8.7,9.2,10.0},100};
  str10 s10_2={{1,0},{},100};
  str10 s10_3={{1,0},{1.0}};
//---
  Print("1.  s10_1.d1[5] = ",s10_1.d1[5]);
  Print("2.  s10_2.d1[5] = ",s10_2.d1[5]);
  Print("3.  s10_3.d1[5] = ",s10_3.d1[5]);
  Print("4.  s10_3.d1[0] = ",s10_3.d1[0]);
 }

 
構造体タイプ及び静的配列の変数の場合、(暗黙的に設定されたサイズで)部分のみの初期化が許可されています。構造体または配列の1以上の第一の要素を初期化することができ、他の要素は、ゼロで初期化されます。

参照

データ型型のカプセル化と拡張性変数のアクセス権スコープとライフタイムオブジェクトの作成と解徐