我需要在动态分配内存后在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'ing内存?
注意:有人建议我循环0 <= i < SPACE_SIZE
和0 <= j < SPACE_SIZE
并以这种方式赋值。这样做的问题是不能简单地从i
和j
中计算条目,因此代码最终看起来并不比任何暴力破解方法干净。
如果要在代码中使用所有数据作为文字(进行初始化),为什么不直接将其存储为显式的2D数组来开始,然后完成呢?
最坏的情况是,动态分配并从现有数组中复制。
根据您需要的访问模式,在函数内或全局范围内设置为static const
。