ArrayResize関数について、勘違いをしてましたので記録しておきます。
【サンプルコード】
以下の様なサンプルコードを作成しました。
void OnStart()
{
double k[];
int count;
double sum;
for(int i=1 ;i<10;i++){
ArrayResize(k,i);
k[i-1] = i;
count = ArraySize(k);
sum=0;
for(int q=0;q<count;q++)sum += k[q];
Print("No= ",i," sum = ",sum);
}
}
【勘違いしていた脳内処理】
脳内処理では、以下の様になると思い込んでいました。
No | sum | 脳内処理過程(E= EMPTY_VALUE) |
1 | 1 | k[0]=1 |
2 | 2 | (k[0]=E)+(k[1]=2)=2 |
3 | 3 | (k[0]=E)+(k[1]=E)+(k[2]=3)=3 |
4 | 4 | (k[0]=E)+(k[1]=E)+(k[2]=E)+(K[3]=4)=4 |
5 | 5 | (k[0]=E)+(k[1]=E)+(k[2]=E)+(K[3]=E)+(K[4]=5)=5 |
6 | 6 | 省略 |
7 | 7 | 省略 |
8 | 8 | 省略 |
9 | 9 | 省略 |
簡単に言ってしまえば、ArrayResize関数を実行すると、それ以前に格納した数値は、初期化されると思い込んでいました。
【実際の処理】
No | sum | 実際の処理過程 |
1 | 1 | k[0]=1 |
2 | 3 | (k[0]=1)+(k[1]=2)=3 |
3 | 6 | (k[0]=1)+(k[1]=2)+(k[2]=3)=6 |
4 | 10 | (k[0]=1)+(k[1]=2)+(k[2]=3)+(K[3]=4)=10 |
5 | 15 | (k[0]=1)+(k[1]=2)+(k[2]=3)+(K[3]=4)+(K[4]=5)=15 |
6 | 21 | 省略 |
7 | 28 | 省略 |
8 | 36 | 省略 |
9 | 45 | 省略 |
実施は、上記の様になります。つまり、配列を、初期化せずに配列数を変えていきます。
ArrayResize関数は、動的配列を行うための関数だったってことです。
【まとめ】
alohafxさんのブログに書かれているように、ATC2011に再挑戦しようと思っていますが・・・・こんな状態です。はたして間に合うかどうか・・・、それと、
ツイッターをしてみることにしました。ほとんど情報収集用ですが・・
0 件のコメント :
コメントを投稿