使用您的分配模式,由于第二个循环中的多次分配,您无法进行简单的复制。这取决于你真正追求的是什么。您可以安排一些事情,以便只分配一组指针 - 通过将指针设置到当前的 1D 数组中,以便您可以将其作为 2D 数组访问。或者,您可以创建一维数组的副本,然后设置指针(2 个分配、1 个副本、1 个初始化循环)。由于唯一的问题是是否复制原始分配,因此主要答案将适用于原始数据。
你有:
int N, A, B;
A = ...;
B = ...;
N = A * B;
double *a_1d = malloc(N * sizeof(double));
...check and load a_1d...
现在您可以通过以下方式创建二维“数组”:
double **a_2d = malloc(A * sizeof(double *));
...check that allocation succeeded...
for (int i = 0; i < A; i++)
a_2d[i] = &a_1d[i * B];
完成此初始化后,您现在可以使用:
for (int i = 0; i < A; i++)
for (int j = 0; j < B; j++)
a_2d[i][j] = ...;
如果你真的需要复制原始a_1d
数组,你会添加:
double *a_1d_copy = malloc(N * sizeof(double));
...check that the allocation succeeded...
memmove(a_1d_copy, a_1d, N * sizeof(double));
然后您可以参考a_1d_copy
而不是a_1d
在设置中a_2d
。
请记住,当需要释放东西时,您需要同时释放a_1d
和a_2d
(a_2d_copy
如果您正在使用它)。