对于每个时间步长,我都有一个二维矩阵 a[ix][iz]
,ix
从 0
到 nx-1
和 iz
从 0
到 nz-1
。
为了组装所有时间步长的矩阵,我定义了一个长度为 nx*nz*nt
的 3D 指针 ***b
。在 it
时刻,矩阵可以用 b[ix][iz][it]
表示,其中 ix
不同于 0
到 nx-1
和 iz
从 0
到 nz-1
。
在时间循环中,我必须在 it
时间将二维数组/指针传递给函数 void func(**ptr)
。因为b
是一个3D指针/数组,在主代码中怎么调用呢?像 func(b[it]);
吗?
最佳答案
您可以将矩阵重组为 b[it][ix][iz]
而不是 b[ix][iz][it]
。这样,您将拥有一个二维矩阵数组,允许您使用 b[it]
在任何给定时间步传递二维矩阵。
否则,如果您保持矩阵不变,则必须在 it
时构造二维数组,然后将其传递给 func()
- 那是您可以通过重构 3D 矩阵来避免额外的计算。
关于从 C 中的 3D 指针/数组调用 2D 指针/数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51108692/