トップ  >  リファレンス  >  基本  >  データ型  > 構造体[struct]
スポンサーリンク
検索
カスタム検索
リファレンスツリー
オススメ
構造体[struct]


構造体

構造体(struct)は、幾つかの異なる型(voidを除く)を まとめて一つのデータ型として扱う事が出来ます。

書式:
struct 構造体名 {
   データ型    メンバ名;
   データ型    メンバ名;
   ・・・
};




構造体名は識別子(変数または関数名)として使う事は出来ません。


管理人の勝手なコメント:
以下のメンバ調整の内容は、dllを考慮してプログラミングする人向けです。
MQL4だけで完結する独立したプログラミングをする場合は気にしなくても良い内容です。
尚、MQL4に#pragmaはありません。


MQL4の構造体は、メンバの型に関係無くそのまま連続します。
(C++で#pragma pack(1)を使い、1byteでアライメントしている状態と同じです。)

もし構造体でアライメント調整を行いたい場合は、原始的な方法ですが調整用メンバを追加する必要があります。
また、double等の大きなデータ型を宣言する場合は、メンバの最初の方で行うのがベターです。

サンプルソース:
    struct tmp_st {
        double  st_double;      // 8byteのデータ
        uchar   st_char;        // 1byteのデータ
        char    st_alignment1;  // 1byteの調整
        short   st_alignment2;  // 2byteの調整
        int     st_int;         // 4byteのデータ
    };

単純な構造体

文字列を含まないまたは動的配列を含まない構造体を単純な構造体と呼びます。
単純な構造体は異なる構造体であったとしても変数を自由にコピーする事が出来ます。

サンプルソース:
struct st_1  {
    char    st1_char;
};

struct st_2  {
    short     st2_short;
};

struct st_3  {
    int     st3_int1;
    int     st3_int2;
};

struct st_4  {                                   // 文字列を含む構造体は"単純な構造体"では無い
    string  st4_str;
};

int OnInit(){

    st_1 s1;
    st_2 s2;
    st_3 s3;
    st_4 s4;
    
    s1.st1_char= 2;        
    s2=s1;
    Print( s1.st1_char , " " , s2.st2_short);   // 2 2表示
    
    s3=s2;
    Print( s3.st3_int1, " " , s3.st3_int2);     // 2 0表示
    
    s4.st4_str="文字定数";
    s3=s4;                                       // "単純な構造体"では無い為エラー
          
    return 0;
}

構造体メンバへのアクセス

構造体の型は、この型の変数を宣言する為の新しいデータ型です。
構造体の型は、プロジェクトの範囲内で一度だけ宣言する事が出来ます。
構造体のメンバへのアクセスはピリオド(.)を使用します。

サンプルソース:

struct st_marketinfo_type{  // st_marketinfo_type構造体を宣言
   double tmp_high;         // 高値
   double tmp_low;          // 安値
   double tmp_open;         // 始値
   double tmp_close;        // 終値
};

    // st_marketinfo_type構造体型の変数st_dataを宣言し、各メンバを0で初期化
    st_marketinfo_type st_data = {0,0,0,0};

    st_data.tmp_high  = High[0];  // st_data構造体変数のメンバ:高値に直近高値の値を代入
    st_data.tmp_low   = Low[0];   // st_data構造体変数のメンバ:安値に直近安値の値を代入
    st_data.tmp_open  = Open[0];  // st_data構造体変数のメンバ:始値に直近始値の値を代入
    st_data.tmp_close = Close[0]; // st_data構造体変数のメンバ:終値に直近終値の値を代入

    // 取得した高値を表示
    Print( "高値:" + DoubleToStr( st_data.tmp_high , Digits) );
スポンサーリンク



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


Top

inserted by FC2 system