这件事困扰我有一段时间了。很多时候我会创建一个大缓冲区来存储“最大”数量的数据。这有助于避免每次下一个数据集大小变化时动态分配和释放缓冲区。
例如,假设我有一个数组,其实用长度远远超过它实际有用的大小,但我知道有用数据的长度。
int amountOfData = 9;
char data1D[100] = some data that is only 9 bytes long stored in a 100 byte array
假设我有一个算法,我想在这个数据集上运行它,使用 2D 数组索引。所以我希望能够按以下方式访问数据:
cout << "I am accessing this data as a 2D array: " << data1D[0][1] << endl;
假设对于这个算法,我知道2D数组的x和y长度将是:
int xlength = 3;
int ylength = 3;
对于这次迭代,因为 amountOfData = 9
。然而下一次迭代可能会有不同的长度。例如,给定 amountOfData = 16
,它们可能是 xlength = 4
和 ylength = 4
。
我想要进行某种类型的转换,允许我使用2D数组索引来访问1D数组。我知道我的初始1D长度是多少,这告诉我我的2D xlength
和ylength
有多长,所以只要最初的100个字节足够容纳任何对我有用的数据集,就可以轻松完成这项工作,而无需使用new
或malloc
。
我意识到:
char** data2d = (char**) data1D;
由于编译器不知道第二个维度的大小,因此这不起作用。但是在运行时,我会知道它是什么!
为什么会出现这种情况的根本原因是什么? 是否有任何解决方法? 我有没有漏掉什么?
char
作为例子,但今天出现了一个特定的问题,当我想要将一个由专有相机软件输出的unsigned char
的一维数组作为unsigned short
的二维数组来访问时。我希望能够将结果图像作为2D像素数据进行访问。 - dinkelk