トップ  >  リファレンス  >  基本  >  演算子・式  >  他演算子
スポンサーリンク
検索
カスタム検索
リファレンスツリー
オススメ
他演算子

インデックス([ ])

配列の要素は角括弧([])を用いてインデックスを指定します。
配列のインデックスは整数のみ使用出来ます。
配列は4次元配列まで使用出来ます。

配列のインデックスは0から始まり、配列サイズの最大-1までアクセスできます。
例えば、配列サイズが50の場合、[0]〜[49]までアクセスできます。
この範囲を超えたインデックスを使用した場合、
配列外のアドレスにアクセスする事になり、実行中のサブシステムは致命的なエラーを引き起こし、プログラムが停止します。

サンプルソース:
    int     tmp_array[50];              // 要素数50の1次元配列を宣言
    int     tmp_array2[2][2];           // 2次元配列を宣言
    int     tmp_array3[2][2][2];        // 3次元配列を宣言
    int     tmp_array4[2][2][2][2];     // 4次元配列を宣言

    ArrayInitialize( tmp_array , 0 );   // 配列データを0で初期化

    tmp_array[0] = 1;                   // 配列の1番目の要素に1を代入
    tmp_array[1] = 2;                   // 配列の2番目の要素に2を代入
    tmp_array[2] = 3;                   // 配列の3番目の要素に3を代入


    tmp_array[48] = 49;                 // 配列の49番目の要素に49を代入
    tmp_array[49] = 50;                 // 配列の50番目の要素に50を代入

    // NG例
    tmp_array[50] = 51;                 // 範囲外のアクセス


関数の呼び出し

関数の呼び出すには、呼び出す関数名の後ろに丸括弧()を書く必要があります。
関数の引数には対応する型の変数(または定数)を渡す必要があります。
関数の引数は関数名の後ろの丸括弧内に書きます。
引数が複数存在する場合はカンマ(,)で区切ります。

戻り値は関数によって返される値です。
戻り値がvoid型の場合、関数の戻り値はありません。
関数に戻り値がある場合、関数の呼び出しは代入演算子の右側に配置出来ます。

サンプルソース:
int OnInit(){

    int get_sum;

    void_function();                // void_function関数の呼び出し
    
    get_sum = int_fuction( 1 , 2 );  // int_fuctionの呼び出し、戻り値をget_sumに代入

    Print(get_sum);                 // 3表示

    return 0;
}



// void_function関数:戻り値無し(void) , 引数無し(void)
void void_function( void ) {

}

// int_fuction:戻り値型int , 引数1 int型 , 引数2 int型
int int_fuction( int in_int1 , int in_int2 ) {

    int tmp_ret;
    
    tmp_ret = in_int1 + in_int2;            // tmp_retに引数の値を加算
    
    return tmp_ret;                         // 戻り値にtmp_retの値を返す

}




カンマ(,)

カンマで区切った式は、左から右へ実行されます。
右側の式が演算される前に、左側の式の演算結果が反映されます。
その結果の型と値は、右側の式に影響します。

サンプルソース:
    int x , y ;    // int型のxと、int型のyを宣言

    for( x = 0 , y = 99 ; x < 100; x++ , y++ ) {
        Print( x , y );
    }


ピリオド(.)

ピリオドは構造体のメンバと、クラスのpublicメンバへのアクセ為に使用します。
サンプルソース:
    struct tmp_st {
        double  st_double;      // 8byteのデータ
        int     st_int;         // 4byteのデータ
    } st;

    st.st_int = 0;





スコープ演算子(::)

MQL4の関数(Print()関数等)はグローバルな範囲で実行されます。

インポートした関数は、対応するインポートの範囲で呼ばれます。
クラスも対応するクラスの範囲を持ちます。

スコープ名が無い場合、それはグローバルな範囲で使う事を意味します。
スコープ演算子が無い場合、関数も最も近い範囲を検索します。
関数がローカルな範囲に無い場合、グローバルな範囲で検索します。

スコープ演算子はクラスメンバーを決めるのにも用いられます。

サンプルソース:
class CCheckContext{
    int        m_id;
public:
               CCheckContext() { m_id=1234; }
protected:
    int        GetLastError() { return(m_id); }
};


class CCheckContext2 : public CCheckContext {
    int         m_id2;
public:
               CCheckContext2() { m_id2=5678; }
    void        Print();
protected:
    int         GetLastError() { return(m_id2); }
};

void CCheckContext2::Print(){
   ::Print("スコープテスト", CCheckContext::GetLastError());   // スコープテスト1234表示
   ::Print("スコープテスト", CCheckContext2::GetLastError());  // スコープテスト5678表示
   
} 

int OnInit(){

    CCheckContext2 test;
    test.Print();

    return 0;
}





sizeof演算子

sizeof演算子はオブジェクトのデータサイズを取得します。
sizeof演算子の後に中括弧()を書き、中括弧内にデータサイズを取得したいデータを書きます。
どんな識別子も使う事は出来ますが、void型と関数使う事が出来ません。

静的配列に使用した場合、結果は全ての配列(要素数x配列数x要素型サイズ)のサイズになります。
動的的配列に使用した場合、結果は動的配列のサイズになります。

構造体(またはクラス)の型、または構造体(またはクラス)の識別子を使用した場合、構造体(またはクラス)の実際のサイズになります。
サンプルソース:
struct st_type {
    int a;   // 4byteデータ
    int b;   // 4byteデータ
} tmp_st;


int OnInit(){

    int tmp_array[2][2];

    Print(sizeof(int));       // int型のサイズ4(byte)を表示
    Print(sizeof(tmp_array)); // int型の2次元配列(2x2)のサイズ16(byte)を表示

    Print(sizeof(st_type));   // 構造体の型のサイズ8(byte)を表示
    Print(sizeof(tmp_st));    // 構造体の識別子のサイズ8(byte)を表示

    return 0;
    
}
スポンサーリンク


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


Top

inserted by FC2 system