0

我正在为 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;

谢谢!

4

1 回答 1

2

multi_array<T>.data()返回一个指向连续块开头的指针,然后将该指针转换为 3 个双精度数组的指针,该数组是数组数组的元素。看看这个链接:指向 2d 数组的指针
编辑:
3D 数组也是一样的,例如,你为 3D 数组写这个:

double * pU = U.data();
double (*arrayU)[N][4] = (double (*)[N][4])pU;

您已声明arrayU它是一个指向 N * 4 双精度矩阵的指针,也就是说,它指向一个由 4 个双精度数组成的 N 个数组组成的数组。鉴于此,arrayU[0]是一个由 4 个双精度数组成的 N 个数组组成的数组。但是,由于它是一个数组,它会自动转换为指向数组第一个元素的指针。

于 2014-03-27T04:56:43.773 回答