【发布时间】:2015-09-17 07:15:45
【问题描述】:
在为它动态分配内存后,我需要在 C 中初始化一个二维数组。我分配内存如下:
double **transition_mat = (double **) malloc(SPACE_SIZE * sizeof(double *));
for (int i = 0; i < SPACE_SIZE; i++) {
transition_mat[i] = (double *) malloc(SPACE_SIZE * sizeof(double));
}
但是我想将它初始化为某个二维数组,类似于将数组存储在堆栈上时可以完成的初始化方式:
double arr[2][2] = {{1.0, 7.0}, {4.1, 2.9}};
但是,在第一个代码段中分配内存后,尝试如下进行分配会产生错误:
transition_mat = (double **) {{1.0, 7.0}, {4.1, 2.9}};
有人知道在 malloc'ing 内存后初始化数组的干净方法吗?
注意:有人建议我遍历 0 <= i < SPACE_SIZE 和 0 <= j < SPACE_SIZE 并以这种方式分配值。这样做的问题是不能简单地从i 和j 计算条目,因此代码最终看起来并不比任何蛮力方法更干净。
【问题讨论】:
-
循环是唯一的方法。除非你
memcpy来自预先存在的数组。 -
OT:在 C 中不需要,也不建议强制转换返回
void-pointers 的函数。