恥は/dev/nullへ by 初心者

プログラミング素人がのろのろと学んだことをつづっています♪

ArrayResizeで要素数を増やした場合、配列に格納した値に影響は生じるか? (ついでに、--i の失敗談)

タイトル通りの疑問が浮かんだので実験してみました。

必要に応じて配列の要素数を増やそうと思っているのですが、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