我想将父结构双重链接到子结构。我知道这在C++中有效。
struct child;
struct parent{
child* c;
} ;
struct child{
parent* p;
} ;
,但在带有typedefs的C中,我无法在没有警告的情况下使其工作。
struct child;
typedef struct {
struct child* c;
} parent;
typedef struct {
parent* p;
} child;
int main(int argc, char const *argv[]){
parent p;
child c;
p.c = &c;
c.p = &p;
return 0;
}
给我CCD_ 1。第一个子结构是被覆盖的,还是现在有两个不同的数据结构struct child
和child
?
这在C中可能吗?我的第二个想法是使用void*
,并将其投射到任何地方的孩子身上,但到目前为止,任何一种选择都会让我嘴里留下酸味。
您可以声明结构,然后稍后对其进行类型定义:
struct child {
struct parent* p;
};
struct parent {
struct child* c;
};
typedef struct parent parent;
typedef struct child child;
int main(int argc, char const *argv[]){
parent p;
child c;
p.c = &c;
c.p = &p;
return 0;
}
问题在于您有两种不同的结构。第一个是
struct child;
第二个是具有别名子的未命名结构
typedef struct {
parent* p;
} child;
你需要写
typedef struct child {
parent* p;
} child;
您可以声明这样的结构:
typedef struct parent {
struct child* c;
}parent;
typedef struct child {
parent* p;
}child;
int main(int argc, char const *argv[])
{
parent p;
child c;
p.c = &c;
c.p = &p;
return 0;
}