2014-03-27 45 views
0

我使用2D升压辑阵排列如下,升压多阵列3D

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

你在最里面的循环中有一个错字。这可能会让你感到困惑。 – alfC

回答

2

multi_array<T>.data()返回指向连续块开头的指针,然后将指针强制转换为3个双精度数组的指针,这是数组数组的一个元素。看看这个链接:A pointer to 2d array
编辑:
它是三维阵列相同的,例如,你写这个三维数组:

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

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

+0

仍然不明白,那么对于3D数组,我应该写:double * pU = U.data(); double(arrayU)[N] [4] =(double()[N] [4])pU; –

+0

编辑答案。 – jfly