我有一个树形结构。节点将具有叶节点类型和内部节点类型,因此我定义了这些结构,因此内部节点将能够指向内部节点或叶节点。但是,我在访问子指针时遇到了麻烦,我怎么能这样做,毕竟我的代码完全有意义呢?
typedef struct leaf_node_t {
int type;
int key;
int *data_ptr[2]; //This will point to real data.
} leaf_node_t;
typedef struct internal_node_t {
int type;
int key;
typedef union{
struct internal_node_t* iptrs[2];
leaf_node_t* lptrs[2];
} node_ptr;
} internal_node_t;
答案 0 :(得分:2)
试试这个:
typedef struct leaf_node_t{
int key;
int *data_ptr[2];//this will point to real data
} leaf_node_t;
struct internal_node_t;
typedef union{
struct internal_node_t* iptrs[2];
leaf_node_t* lptrs[2];
} node_ptr;
typedef struct internal_node_t{
int key;
node_ptr node;
} internal_node_t;
int main()
{
internal_node_t inode;
leaf_node_t* leaf_node = inode.node.lptrs[0];
return 0;
}
或者,如果您实际上不需要在其他地方使用union typedef:
typedef struct leaf_node_t{
int key;
int *data_ptr[2];//this will point to real data
}leaf_node_t;
typedef struct internal_node_t{
int key;
union{
struct internal_node_t* iptrs[2];
leaf_node_t* lptrs[2];
}node_ptr;
}internal_node_t;
int main()
{
internal_node_t inode;
leaf_node_t* leaf_node = inode.node_ptr.lptrs[0];
return 0;
}
答案 1 :(得分:2)
node_ptr的typedef实际上并没有向其封闭结构添加字段。下面首先添加字段,然后使用typedef进行跟进。我做的另一个改变是让union表示一个指针,将它留给使用它来决定它想要多少指针的结构。
typedef struct internal_node_t{
int type;
int key;
union node_ptr_t {
struct internal_node_t* iptr;
leaf_node_t* lptr;
} node_ptr[2];
}internal_node_t;
typedef union node_ptr_t node_ptr_t;
答案 2 :(得分:1)
您应该在internal_node中添加一个标志,以了解node_ptr是什么,如果它是internal_node_t或leaf_node_t。可能是int isInternal [2]; (在键之后和typedef之前)。如果它是0,那么它是内部的,如果它是1那么它是leaf_node_t。 C语言没有typeof或GetType来知道指针指向什么类型的内存(只有当你使用RTTI“选项”激活时,C ++才会使用它)