【MQL4】~2つ以上の値をreturnしたい~
スポンサーリンク
KeyKです。今週は試験でバタバタなので、以前つまづいた「関数から2つ以上の値をreturnする方法」について書きます。
関数から2つ以上の値を返せるのか?
基本的に関数を使用する場合、returnで返ってくる値は1つだけです。では2つ以上の値はreturnできないのか?いくつか方法はありますが、今回は参照渡しという手法でやります。
参照渡しとは?
参照渡しの反対を「値渡し」といいます。つまり、関数に値だけを渡して処理させるため、もとの変数(アドレス)に入っている値は変わりません。
一方、「参照渡し」という方法は、値の格納されている変数のアドレスを引数として渡します。つまり、もとの変数(アドレス)に入っている値が変わります。
5つの値が入った配列を、正の値は1、負の値は0とする例をやってみます。
①まず、配列arrに5つの値を格納します。
int arr[5] = {-4, 1, -6, 3, 9};
②正の値を1、負の値を0とする関数を作ります。
void change_arr(int &arr_after[]) { for(int i =0; i < ArrayRange(arr_after, 0); i++){ if(arr_after[i] >= 0) arr_after[i] = 1; else arr_after[i] = 0; } }
ここで注意点ですが、関数の引数に&を付けます。こうすることで、配列の先頭アドレスを渡すことができます。
③関数を実行する
change_arr(arr)
すると、配列arrの中身は以下のようになります。
arr[5] = {0, 1, 0, 1, 1};
もとの配列が変わっています。この参照渡しの方法を使えば、配列に値を代入することができ、複数の値を取得することが出来ます。
※ 値渡しや参照渡しについては、理屈的に理解できていない点があるのでご了承ください。
参考にしたサイトは以下にあります。
autoforex.blog.fc2.com