我正在使用2D的boost mutli数组,如下所示,
typedef boost::multi_array<double, 2> array_type;
typedef array_type::index index;
// initialize array
array_type U(boost::extents[N][3]);
for(index i = 0; i != N; ++i) {
for(index j = 0; j != 3; ++j){
U[i][j] = 0;
}
}
double * pU = U.data();
double (*arrayU)[3] = (double (*)[3])pU;
现在我正在尝试实现它,但对于3D,到目前为止我已经写了以下内容,
typedef boost::multi_array<double, 3> array_type;
typedef array_type::index index;
// initialize array
array_type U(boost::extents[M][N][4]);
for(index i = 0; i != M; ++i) {
for(index j = 0; j != N; ++j){
for(index k = 0; k != 4; ++k){
U[i][j][k] = 0;
}
}
}
但是下面这部分仍然让我感到困惑,你能告诉我怎么做并解释一下吗?
double * pU = U.data();
double (*arrayU)[3] = (double (*)[3])pU;
谢谢!
答案 0 :(得分:2)
multi_array<T>.data()
返回指向连续块开头的指针,然后将指针强制转换为3个双精度数组的指针,该数组是数组数组的元素。请看一下这个链接:A pointer to 2d array
修改强>
对于3D阵列也是如此,例如,您为3D阵列编写了这个:
double * pU = U.data();
double (*arrayU)[N][4] = (double (*)[N][4])pU;
您已声明arrayU
是指向N * 4矩阵的双精度指针,也就是说,它指向N个4个双精度数组的数组。鉴于此,arrayU[0]
是由4个双精度数组成的N个数组的数组。但是,由于它是一个数组,它会自动转换为指向数组第一个元素的指针。