如何在不分配内存的情况下将一维数组转换为二维数?

时间:2015-12-07 07:18:46

标签: c++ visual-studio

我有一个填充的一维数组double *vals作为类型组件,大小为Nn[0]*Nn[1]。我需要得到二维数组**w (w[Nn[1]][Nn[0]])而不为它分配新的内存,例如我需要将vals表示为二维数组。

使用g ++编译器我可以制作

double (* w)[Nn[0]] = (double (*)[Nn[0]])val;

但VS编译器或英特尔编译器不允许使用非常量表达式作为维数组。

通常,我可以在初始vals数组中使用元素将int元素的2 w[i][j]个索引(i,j)转换为全局索引,并且不声明{{1}完全没有。但如果可以在初始内存上获得二维数组w(也可以使用英特尔编译器进行编译),那就太棒了。那有什么办法吗?

1 个答案:

答案 0 :(得分:1)

如果wals是一个类,你可以实现你的访问操作符,就好像它是2D数组一样。

walsdataType walsclass::operator()(int i, int j){return walsdata[i*N+j]};

walsdata是用于存储数据的类成员,N是行长度。你也应该进行绑定检查。