这困扰了我一段时间。很多时候,我发现自己制作了一个大缓冲区来保存“最大”数量的数据。这有助于我避免每次下一个数据集的大小发生变化时动态分配和解除分配缓冲区。
例如,假设我有一个数组对于它的实际有用大小来说太大了,但我知道有用数据的长度。
int amountOfData = 9;
char data1D[100] = some data that is only 9 bytes long stored in a 100 byte array
假设我有一个算法要在这个使用二维数组索引的数据集上运行。所以我希望能够按如下方式访问数据:
cout << "I am accessing this data as a 2D array: " << data1D[0][1] << endl;
假设对于这个算法,我知道二维数组的 xlength 和 ylength 将是:
int xlength = 3;
int ylength = 3;
对于本次迭代,因为amountOfData = 9
. 但是,下一次迭代的长度可能会有所不同。IE。他们可以xlength = 4
被ylength = 4
给予amountOfData = 16
。
我想做某种类型的转换,允许我使用 2D 数组索引转换 1D 数组。我知道我的初始 1D 长度有多长,它告诉我我的 2Dxlength
和有多长ylength
,所以这应该很容易做到而不使用new
或malloc
只要初始 100 字节足够长以容纳对我有用的数据集。
我意识到:
char** data2d = (char**) data1D;
将不起作用,因为编译器不知道第二维的大小。但我会在运行时知道它是什么!
造成这种情况的根本原因是什么?有什么解决方法吗?我错过了什么吗?