タイトル通りの疑問が浮かんだので実験してみました。
必要に応じて配列の要素数を増やそうと思っているのですが、ArrayResizeで配列の要素数を増加させた場合、それ以前に存在した要素の値に影響があるのか調べました。
実験に使用したスクリプト
#property copyright "Copyright 2020. PHILOJUAN" #property version "1.00" #property strict void OnStart() { int hoge[]; ArrayResize(hoge, 1); hoge[0] = 999; for(int i = 2; i < 11; i++){ ArrayResize(hoge, i); hoge[i - 1] = i - 1; } for(int j = 0; j <= 9; j++){ printf("hoge[%d]: %d", j, hoge[j]); } }
MT4のエキスパートに出力されたもの
hoge[9]: 9 hoge[8]: 8 hoge[7]: 7 hoge[6]: 6 hoge[5]: 5 hoge[4]: 4 hoge[3]: 3 hoge[2]: 2 hoge[1]: 1 hoge[0]: 999
上記の結果を見る限り、要素数を増加させる前に格納した値には影響が無いと分かったので、安心してArrayResizeを使いたいと思います^^。
失敗したこと
hoge[i - 1] = i - 1;
の行で、「i - 1」の代わりに
--i
を使ってしまい、ループが終了しなくなるというミスをしました(汗)。
ここで i の値を1つ減らしてしまうと、for文の「i++」と相まって、 i の値は「1減って、1増えて」を繰り返すので、いつまで経ってもfor文が終わらないことになります。
備考
i - 1
という式は、i の値を変化させません。しかし、
--i
は、以下の代入式と同じなので i の値を変化させてしまいます。
i = i - 1