将一个结构分配给C中结构内部的另一个结构
我想将一个结构分配到结构中的一个字段中,使其成为指向结构的指针。 我会在这里告诉你我在说什么:将一个结构分配给C中结构内部的另一个结构,c,pointers,struct,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 *r
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(因此是一个几何体数组)。
假设我已经用几何体初始化了结构“场景”,我想将其几何体复制到结构“场景”中,然后在场景->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?
}
场景*scn//已经使用nshapes=6初始化,因此使用6个几何体初始化,直到g[5];
对于(k=0;knshapes;k++){
//我能在这里做什么?
}
为什么需要循环?你只需要做:
scn->root->geometry = scn->geometry;
但如果我知道这不是你想要的,请告诉我
编辑
您希望复制每个scen->g
中scn->g
的每个几何体值。但这很奇怪,除非在结构场景中有几何体**g
。但是,您可以使用代码执行此操作:
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;
}
如果定义了几何体
,以便按位复制有意义,则:
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 );
如果没有,则必须循环调用每个几何体
对象的复制函数
另外,尚不清楚SceneGR
应该如何知道其数组中有多少项
销毁SceneGR
场景时,不要忘记释放(gr->g)
场景*scn代码>是唯一的声明。不是初始化。你想要一个副本还是应该指向同一个对象?@Jayesh我不能向你展示整个程序,相信我,在循环之前我已经初始化了。我没有写它,因为有数百行代码。@mch我想要一个副本,这样每个scn->g[k]都会被复制到每个新的sceneGR对象中;例如:sceneGR*gr0=scn->g[0],sceneGR*gr1=scn->g[1]等等@Aerox什么?但您希望将几何体
属性化为场景
。这没有道理。不清楚你想要什么。是的,对不起,这不是我真正想做的。类似于:将scn->g[k]复制到其scenGR->g中新定义的sceneGR中,因为每个场景->g[k]都是不同的。因此,我想在每个不同的场景中单独复制它。现在,它与您发布的第一个方法一起工作。非常感谢你。我不明白错误到底在哪里。我所知道的唯一一件事是,它是有效的:-)
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 );