「Dynamic Arrays in C」の編集履歴(バックアップ)一覧はこちら
追加された行は緑色になります。
削除された行は赤色になります。
[[FFTWマニュアル]] - [[その他重要なこと>Other Important Topics]] - [[多次元配列のフォーマット>Multi-dimensional Array Format]] - [[C言語における動的配列>Dynamic Arrays in C]]
* C言語における動的配列 Dynamic Arrays in C
ほとんどの場合に、動的にfftw_mallocを使って、配列を確保することを推奨します。1次元の場合よりも、多次元の方が複雑ではありますが、これは難しいことではありません。
配列の生成は簡単です。&bold(){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)]
という表現を使えばよいでしょう。
[[FFTWマニュアル]] - [[その他重要なこと>Other Important Topics]] - [[多次元配列のフォーマット>Multi-dimensional Array Format]] - [[C言語における動的配列>Dynamic Arrays in C]]
* C言語における動的配列 Dynamic Arrays in C
ほとんどの場合に、動的にfftw_mallocを使って、配列を確保することを推奨します。1次元の場合よりも、多次元の方が複雑ではありますが、これは難しいことではありません。
配列の生成は簡単です。&bold(){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標準は、動的配列を、[]表現が使える”可変長”多次元配列として、解釈する機能がありますが、これはまだコンパイラで広くサポートされるものではありません。