我有一个填充的一维数组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
(也可以使用英特尔编译器进行编译),那就太棒了。那有什么办法吗?
答案 0 :(得分:1)
如果wals是一个类,你可以实现你的访问操作符,就好像它是2D数组一样。
walsdataType walsclass::operator()(int i, int j){return walsdata[i*N+j]};
walsdata是用于存储数据的类成员,N是行长度。你也应该进行绑定检查。