C言語における動的配列 Dynamic Arrays in C


 ほとんどの場合に、動的にfftw_mallocを使って、配列を確保することを推奨します。1次元の場合よりも、多次元の方が複雑ではありますが、これは難しいことではありません。

 配列の生成は簡単です。fftw_mallocのような動的メモリ確保ルーチンを使って、N個のfftw_complex値(複素数DFTに関しては)の大きさの配列を確保します。ここで、Nは配列の次元の積(すなわち、配列の複素数知の総数)です。以下に、ランク3の5x12x27の配列を確保するコード例を示します。

fftw_complex *an_array;
an_array = (fftw_complex*)fftw_malloc( 5*12*27 * sizeof(fftw_complex) );

 配列の要素にアクセスするには、少しテクニックがいります。つまり、固定サイズの配列と同じように"[]"を複数回使えばよいといものではありません。代わりに、明示的に列メジャー配列へ変換するための公式をつかって、オフセットを計算する必要があります。たとえば、上記の方法で確保された、(i,j,k)番目の要素を参照するためには、

an_array[k + 27 * (j + 12*i)]

という表現を使えばよいでしょう。

 この手間は、適切なマクロを定義するか、もしくはC++言語では、"()"演算子をオーバーロードするクラスを作れば、軽減できます。最近のC99標準は、動的配列を、[]表現が使える”可変長”多次元配列として、解釈する機能がありますが、これはまだコンパイラで広くサポートされるものではありません。
最終更新:2008年10月20日 14:18