我想将结构分配给结构中的字段,它是指向结构的指针。 我会告诉你我在说什么:
typedef struct {
char *name;
} geometry;
typedef struct sceneGR_tag {
geometry *g;
struct sceneGR_tag *next;
} sceneGR;
typedef struct {
geometry *g;
int nshapes;
sceneGR *root;
} scene;
如您所见,sceneGR
具有几何* g(因此是几何数组)。
前提是我已经用它的几何体初始化了结构“场景”我想将它的几何体复制到结构'sceneGR'中,所以在sceneGR-> g中。
我如何在我的for
中执行此操作?:
scene *scn; //already initialized with nshapes=6, and so with 6 geometries until g[5];
for(k = 0; k < scn->nshapes; k++) {
//what can i do here?
}
答案 0 :(得分:1)
为什么需要循环?你必须这样做:
scn->root->geometry = scn->geometry;
但是,如果我不是你想要的,请告诉我。
修改强>
您希望在每个scn->g
中复制sceneGR->g
的每个几何值。但除非你的geometry** g
中有struct scene
,否则这很奇怪。但是,您可以使用代码执行此操作:
scene *scn;
sceneGR *s_list = scn->root;
for(k = 0; k < scn->nshapes; k++) {
s_list->g = &(scn->g[k]);
s_list = s_list->next;
}
但是geometry** g
中有struct scene
,您可以执行以下操作:
scene *scn;
sceneGR *s_list = scn->root;
for(k = 0; k < scn->nshapes; k++) {
s_list->g = scn->g[k];
s_list = s_list->next;
}
答案 1 :(得分:0)
如果定义了geometry
以便按位复制有意义,那么:
SceneGR *gr = malloc(sizeof *gr);
size_t num_bytes_to_copy = scn->nshapes * sizeof scn->g[0];
gr->next = NULL;
gr->g = malloc( num_bytes_to_copy );
memcpy(gr->g, scn->g, num_bytes_to_copy );
如果没有,则必须循环调用每个geometry
对象的复制功能。
此外,还不清楚SceneGR
应该知道其数组中有多少项。
当你摧毁free(gr->g)
时,不要忘记SceneGR
。