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

问题描述 投票:0回答:1

我正在尝试用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])我只传递了一个“单个”指针,指向实际上由三指针引用的东西 - 但是它应该在它们编写时起作用吗?如果是这样,编译器如何知道其他维度在哪里?

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

c arrays pointers pass-by-reference
1个回答
0
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.