我正在开发一个程序,其逻辑流程已通过自由使用结构类型而大大简化。我现在需要使用一个函数来扩充程序,该函数将所有相关参数格式化为双精度数组(如 中double *
)作为其参数之一。不幸的是,我相当缺乏经验的自己正在为此苦苦挣扎。
目前,结构类型parameters
定义为
typedef struct parameters {
double u1;
double u2;
double u3;
model1 x[MAX_XMODELS];
model2 y[MAX_YMODELS];
model3 z[MAX_ZMODELS];
} parameters;
类型model1
,model2
和model3
本身是结构类型,也包含双精度和双精度结构。但是,无论结构层如何下降,double
最终总是会到达类型变量。
我试过了
parameters current;
/* Stuff that partially fills the model arrays in
current, depending on the situation of interest */
double checkem[MAX_PARS];
memcpy(checkem,¤t,sizeof(current));
其中MAX_PARS
是类型 结构中的双精度数parameters
,假设模拟中使用的模型的最大数量(MAX_XMODELS
等)。而且,除了编译器警告之外,这还有效……除了现在数组中通常存在大量垃圾值,因为如果使用的模型少于程序能够处理的数量,则不会对模型数组进行分配。
因此,我想将struct 重新定义为
typedef struct parameters {
double u1;
double u2;
double u3;
model1 *x;
model2 *y;
model3 *z;
} parameters;
然后根据程序在初始化期间被告知要使用的模型数量动态分配内存,使用类似的东西
parameters current;
current.x = malloc(numx*sizeof(struct model1));
current.y = malloc(numy*sizeof(struct model2));
current.z = malloc(numz*sizeof(struct model3));
但是,以前的策略似乎memcpy
不会起作用,因为复制的是指针,而不是已分配的内容。那么,在我的情况下什么会起作用?没有简单的方法可以做到这一点吗?