我可以使用& array [0] [0] [0]传递声明为double ***数组的3D数组吗?

时间:2017-10-02 21:24:03

标签: c arrays pointers pass-by-reference

我正在尝试从C 中的 Numerical Recipes实现3D傅里叶变换的例程。 他们有功能

void rlft3(double ***data, double **speq, unsigned long nn1, unsigned long nn2, unsigned long nn3, int isign);
void fourn(double data[], unsigned long nn[], int ndim, int isign); 

(他们最初有float,我更改为double。)

他们从fourn()致电rlft3(),如此:

fourn(&data[1][1][1]-1,nn,3,isign);

我修改为

fourn(&data[0][0][0],nn,3,isign);

当我这样做时,我只得到第一列 - 换句话说,我的矩阵data的一个维度 - 而不是整个事物。这对我来说是模糊的,因为(据我理解代码&data[i][j][k])我只传递一个“单个”指针指向实际由三指针引用的东西 - 但它是假设的他们写作时工作?如果是这样,编译器如何知道其他维度在哪里?

我无法理解为什么我的电话无法正常工作,因为我不太清楚这里的策略是什么。

1 个答案:

答案 0 :(得分:0)

好的,我99%确定我弄清楚问题是什么:

尽管NR(实际上它是1988年第二版完成FORTRAN风格的索引)函数rlft3()被编写为接受double ***data作为参数,但它是设计的因此,这个三重指针必须是一个单独声明的指针,然后在已经存在的数组中引用/指向并且被静态声明。我所做的是从包装函数发送rlft3()矩阵***data,其中三重指针已直接动态分配给它。因此,内存不是连续的,并且无法从使用&传递的一个指针找到所有内存。运算符,因为我认为如果它指向静态分配的数组。