我需要在为其动态分配内存后在C中初始化2D数组。我按如下方式分配内存:
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));
}
然后我想将它初始化为某个2D数组,类似于在堆栈中存储数组时可以进行初始化的方式:
double arr[2][2] = {{1.0, 7.0}, {4.1, 2.9}};
但是,在第一个代码段中分配内存后,尝试按如下方式进行分配会产生错误:
transition_mat = (double **) {{1.0, 7.0}, {4.1, 2.9}};
有没有人知道在malloc内存之后初始化数组的一种干净方法?
注意:有人建议我循环遍历0 <= i < SPACE_SIZE
和0 <= j < SPACE_SIZE
并按此方式分配值。问题在于,不能简单地从i
和j
计算条目,因此代码最终看起来不比任何暴力方法更清晰。
答案 0 :(得分:3)
如果您要在代码中将所有数据作为文字(进行初始化),那么为什么不将它作为一个显式的2D数组存储开始,并完成?
最坏的情况是,从现有阵列进行动态分配和复制。
在函数内部或全局范围内设置static const
,具体取决于您需要的访问模式。