C并集与结构问题

C并集与结构问题,c,C,我有一个树形结构。节点将具有叶节点类型和内部节点类型,因此我定义了这些结构,因此内部节点将能够指向内部节点或叶节点。然而,我在访问子指针时遇到了麻烦,我如何才能做到这一点,毕竟我的代码有意义吗 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_nod

我有一个树形结构。节点将具有叶节点类型和内部节点类型,因此我定义了这些结构,因此内部节点将能够指向内部节点或叶节点。然而,我在访问子指针时遇到了麻烦,我如何才能做到这一点,毕竟我的代码有意义吗

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;

您应该在内部节点中添加一个标志,以了解什么是节点,如果是内部节点还是叶节点。可能是一个int-isInternal[2];(在按键之后和typedef之前)。如果它是0,则它是内部的,如果它是1,则它是叶节点。C语言没有一个类型或GETTYPE来知道指针所指向的内存类型(C++)只有当你用RTTI选项激活时,C++才可以尝试:

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

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;

您如何知道内部节点是指向另一个内部节点还是指向叶节点?您的代码不允许内部节点具有叶子节点和内部节点子节点联合不符合我的要求?联合工作正常@MahlerFive的意思是如果你有一个内部子元素和一个叶子子元素,你是对的!然而,我正在制作一棵平衡树,所以我想这没有问题。