第72章 借りたら返す2

 メモリの動的確保の基本は前回の通りです。しかし、配列を確保するときはちょっと書式が変わってきます。今回は、その配列の確保の仕方について話したいと思います。


 では、今回の要点です。


 では、いってみましょう。


 前回言った通り、今回は配列を動的に確保してみたいと思います。

 new の書式は実に簡単です。型の後に [<要素数>] を付け加えればいいだけです。これは、あまり問題はありませんね。

 さて、問題はこれをどんなポインタで受ければいいかです。前回の話からいくと配列へのポインタでしょうか? 配列へのポインタとはどんなものなんでしょうかね。

 実は、この答は今までやってきたことを思い返せば、簡単に分かるものなのです。さぁ、配列を関数に渡すときにはどうしたでしょうか? そうです。それと全く同じ事なのです。配列でも <型> へのポインタで受ければいいのです。

 例えば new int[100] を int* array で受けたとすると、array[index] とすれば index 番目の要素が扱えるわけです。紙の上に図でも書けば、よく分かると思います。

 では、次のプログラムを見て下さい。

プログラム
// New2.cpp
#include <iostream.h>

... 第57章にある ... ... StoreFibo と DispFibo の定義を ... ... ここにコピーして下さい ...
int main() { int* array; int nSize; cout << "どこまで計算しますか? " << flush; cin >> nSize; array = new int[nSize]; if(array == NULL) return 0; StoreFibo(array, nSize); DispFibo(array, nSize); delete [] array; return 0; }
実行結果
どこまで計算しますか? 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 [] はきちんと使い分けて下さい。

 ちなみに、[ と ] の間は別にいくら空けても構いません。空けたければ空けて下さい。


 今回はこれで終わりです。最近長いのが続いたので、たまにはこれくらい短いのもいいでしょう。

 では、今回の要点です。


 それでは次回まで。さようなら。


第71章 借りたら返す | 第73章 借りたら返す3

Last update was done on 2000.7.29

この講座の著作権はロベールが保有しています