Node:Dynamic Arrays in C, Next:Dynamic Arrays in C-The Wrong Way, Previous:Static Arrays in C, Up:Multi-dimensional Array Format
We recommend allocating most arrays dynamically, with
fftw_malloc
. This isn't too hard to do, although it is not as
straightforward for multi-dimensional arrays as it is for
one-dimensional arrays.
Creating the array is simple: using a dynamic-allocation routine like
fftw_malloc
, allocate an array big enough to store N
fftw_complex
values (for a complex DFT), where N is the product
of the sizes of the array dimensions (i.e. the total number of complex
values in the array). For example, here is code to allocate a 5x12x27
rank 3 array:
fftw_complex *an_array; an_array = fftw_malloc(5*12*27 * sizeof(fftw_complex));
Accessing the array elements, however, is more tricky--you can't simply
use multiple applications of the []
operator like you could for
static arrays. Instead, you have to explicitly compute the offset into
the array using the formula given earlier for row-major arrays. For
example, to reference the (i,j,k)-th element of the array
allocated above, you would use the expression an_array[k + 27 * (j
+ 12 * i)]
.
This pain can be alleviated somewhat by defining appropriate macros,
or, in C++, creating a class and overloading the ()
operator.
The recent C99 standard provides a way to dynamically reinterpret the
array as a static-like multi-dimensional array amenable to []
,
but this feature is not yet widely supported by compilers.