将结构分配给C中结构内的另一个结构

时间:2014-07-10 09:00:38

标签: c pointers struct

我想将结构分配给结构中的字段,它是指向结构的指针。 我会告诉你我在说什么:

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?
}

2 个答案:

答案 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