メモリの動的確保の基本は前回の通りです。しかし、配列を確保するときはちょっと書式が変わってきます。今回は、その配列の確保の仕方について話したいと思います。
では、今回の要点です。
では、いってみましょう。
前回言った通り、今回は配列を動的に確保してみたいと思います。
new の書式は実に簡単です。型の後に [<要素数>] を付け加えればいいだけです。これは、あまり問題はありませんね。
さて、問題はこれをどんなポインタで受ければいいかです。前回の話からいくと配列へのポインタでしょうか? 配列へのポインタとはどんなものなんでしょうかね。
実は、この答は今までやってきたことを思い返せば、簡単に分かるものなのです。さぁ、配列を関数に渡すときにはどうしたでしょうか? そうです。それと全く同じ事なのです。配列でも <型> へのポインタで受ければいいのです。
例えば new int[100] を int* array で受けたとすると、array[index] とすれば index 番目の要素が扱えるわけです。紙の上に図でも書けば、よく分かると思います。
では、次のプログラムを見て下さい。
プログラム |
---|
// New2.cpp #include <iostream.h> |
実行結果 |
どこまで計算しますか? 15 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 |
第57章でやったフィボナッチ数列ですね。長くなるので StoreFibo と DispFibo は自分で第57章からコピーして下さい。
前は10個の要素の配列を作って、それを使って計算、表示するようにしていました。しかし、今度はどこまで計算するかをたずね、その分だけ配列を作り、そしてその配列を使って計算、表示するようにしました。
このように、new の [ ] の中には変数も入れられます。実際には変数だけでなく、あらゆる式が入れられます。
で、無事フィボナッチ数列を計算でき、表示もできました。エラーも出ず、何も問題はありませんでした。さて、メモリも使い終えたので、このメモリを解放するとしましょう...と、あれ? delete と array の間に何か変なものがありますね。
よく見ると、配列の要素を示すときのカッコのようです。このように、配列を確保したときは、delete の後に [ ] を付けるのです。これは決まりです。もし [ ] を付けなれば、何が起こるか分かりません。逆に、配列でないものを delete [] で解放しても、何が起こるか分かりません。
delete と delete [] はきちんと使い分けて下さい。
ちなみに、[ と ] の間は別にいくら空けても構いません。空けたければ空けて下さい。
今回はこれで終わりです。最近長いのが続いたので、たまにはこれくらい短いのもいいでしょう。
では、今回の要点です。
それでは次回まで。さようなら。
Last update was done on 2000.7.29
この講座の著作権はロベールが保有しています