インデックス([ ])
配列の要素は角括弧([])を用いてインデックスを指定します。
配列のインデックスは整数のみ使用出来ます。
配列は4次元配列まで使用出来ます。
配列のインデックスは0から始まり、配列サイズの最大-1までアクセスできます。
例えば、配列サイズが50の場合、[0]~[49]までアクセスできます。
この範囲を超えたインデックスを使用した場合、
配列外のアドレスにアクセスする事になり、実行中のサブシステムは致命的なエラーを引き起こし、プログラムが停止します。
サンプルソース:
int tmp_array[50];
int tmp_array2[2][2];
int tmp_array3[2][2][2];
int tmp_array4[2][2][2][2];
ArrayInitialize( tmp_array , 0 );
tmp_array[0] = 1;
tmp_array[1] = 2;
tmp_array[2] = 3;
tmp_array[48] = 49;
tmp_array[49] = 50;
tmp_array[50] = 51;
関数の呼び出し
関数の呼び出すには、呼び出す関数名の後ろに丸括弧()を書く必要があります。
関数の引数には対応する型の変数(または定数)を渡す必要があります。
関数の引数は関数名の後ろの丸括弧内に書きます。
引数が複数存在する場合はカンマ(,)で区切ります。
戻り値は関数によって返される値です。
戻り値がvoid型の場合、関数の戻り値はありません。
関数に戻り値がある場合、関数の呼び出しは代入演算子の右側に配置出来ます。
サンプルソース:
int OnInit(){
int get_sum;
void_function();
get_sum = int_fuction( 1 , 2 );
Print(get_sum);
return 0;
}
void void_function( void ) {
}
int int_fuction( int in_int1 , int in_int2 ) {
int tmp_ret;
tmp_ret = in_int1 + in_int2;
return tmp_ret;
}
カンマ(,)
カンマで区切った式は、左から右へ実行されます。
右側の式が演算される前に、左側の式の演算結果が反映されます。
その結果の型と値は、右側の式に影響します。
サンプルソース:
int x , y ;
for( x = 0 , y = 99 ; x < 100; x++ , y++ ) {
Print( x , y );
}
ピリオド(.)
ピリオドは構造体のメンバと、クラスのpublicメンバへのアクセ為に使用します。
サンプルソース:
struct tmp_st {
double st_double;
int st_int;
} 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());
::Print("スコープテスト", CCheckContext2::GetLastError());
}
int OnInit(){
CCheckContext2 test;
test.Print();
return 0;
}
sizeof演算子
sizeof演算子はオブジェクトのデータサイズを取得します。
sizeof演算子の後に中括弧()を書き、中括弧内にデータサイズを取得したいデータを書きます。
どんな識別子も使う事は出来ますが、
void型と関数は使う事が出来ません。
静的配列に使用した場合、結果は全ての配列(要素数x配列数x要素型サイズ)のサイズになります。
動的的配列に使用した場合、結果は動的配列のサイズになります。
構造体(またはクラス)の型、または構造体(またはクラス)の識別子を使用した場合、構造体(またはクラス)の実際のサイズになります。