将一维数组视为二维数组

Treat one-dimensional array as two-dimensional

我有一个一维数组

int* a = new int[n * m];

我需要将其视为二维的,即

a[i][j] = a[n * i + j]

我试过使用指令并在谷歌上搜索了很多。但对我没有任何帮助。
有什么办法吗? SMT。喜欢 define a[i][j] a[n * i + j] ?
谢谢

您需要定义第二个包含指针的数组。像这样:

int **b=new int *[m];

for (int i=0; i<m; ++i)
     b[i]=&a[i*n];

之后,b[i][j]将引用a[n*i+j]

由于您使用 C++ 编程,您可以创建一个包装器 -class 来保存数组,并具有一个 operator[] 函数,该函数 return 是一个代理对象,其 operator[] 函数执行 n * i + j 计算和 return 对所需元素的引用。

或者,您可以创建一个内联函数或类似函数的宏,它将数组和索引作为参数,return 元素。

但是如果没有像 包装器 classes 中那样的黑客攻击,就无法获得您想要的 "true" 数组数组。