トップ  >  リファレンス  >  基本  >  変数  >  変数の初期化
スポンサーリンク
検索
カスタム検索
リファレンスツリー
オススメ
変数の初期化


変数は宣言時に初期化する事が出来ます。
変数が明示的に初期化されていない場合、変数の初期値は不明です。
暗黙の初期化は行われません。

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

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


配列要素の初期値リストは中括弧で囲む必要があります。
初期化シーケンスが無い場合、ゼロに等しいとみなされます。
初期化シーケンスは少なくても1つの値を持つ必要があります。
この値は、対応する構造体または配列の最初の要素の初期化に使われ、不足している要素はゼロに等しいとみなされます。
初期化された配列サイズを指定していない場合、初期化シーケンスサイズに基づいて、コンパイラが決定します。
多次元配列は、動的配列の場合は1次元配列(追加の中括弧無し)の初期化シーケンスで初期化する事は出来ません。

配列(ローカルレベルで宣言されたものを含む)は定数でのみ初期化する事が出来ます。


構造体型変数の部分的な初期化は、静的配列と同様に許可されています。
構造体または配列の第1要素以上を初期化する事が出来ます。
この場合、初期値が設定されない他要素はゼロで初期化されます。
サンプルソース:
struct st_sub{
    int sm_int1;
    int sm_int2;
};

struct st_test{
    int m_int1;
    int m_int2[2];
    st_sub st_sub_value;
};


int    temp_int             = 1;
string temp_str             = "初期値";
// 動的配列を初期化
int    tenp_int_darray[]    = { 0, 1, 2 };
// 動的2次元配列を初期化(エラー。1次元配列初期化シーケンスで初期化不可)
int    tenp_int_darray2[][] = { 0, 1, 2 }; 
// 静的2次元配列を初期化
int    temp_int_array[3][3] = { {11, 12, 13}, {21, 22, 23}, {31, 32, 33} };
// 静的配列を定数式で初期化
int    temp_int_array2[4]   = {  1+1 , 1+1,  1+1 , 1+1 };

//--- 構造体の最初のメンバだけを1で初期化
st_test st_value ={1};

//--- 構造体メンバの配列を初期化
st_test st_value2={2,{3,4} };

//--- 構造体メンバst_sub_valueの構造体メンバsm_int1だけを初期化
st_test st_value3={ , ,{5} };


void OnInit(){

    Print( temp_int );                           // 1表示
    Print( temp_str );                           // "初期値"表示
    Print( tenp_int_darray[2] );                 // 2表示
    Print( sizeof(tenp_int_darray));             // 12表示(4byte x 3)
    Print( temp_int_array[2][2] );               // 33表示
    Print( st_value.m_int1,st_value.m_int2[0] ); // 10表示

    // 234表示
    Print( st_value2.m_int1,st_value2.m_int2[0],st_value2.m_int2[1] ); 

    // 0005表示
    Print( st_value3.m_int1,st_value3.m_int2[0],st_value3.m_int2[1],st_value3.st_sub_value.sm_int1 ); 
}


スポンサーリンク



Copyright ©2015 MT4でEA自作しちゃお〜 All Rights Reserved.


Top

inserted by FC2 system