如何在结构中为另一个结构分配void指针?

时间:2013-03-15 19:37:51

标签: c data-structures void-pointers doubly-linked-list

我需要一些帮助来处理Doubly Linked Lists,其中节点的结构包含指向void的指针。如果我定义另一个我想插入节点实际数据的结构,我该如何将它指定给void的指针?另外,如何打印列表?

我的节点的结构,在头文件中定义:

typedef struct nodetype
{
    struct nodetype *prev, *next;
    void *data;
} NodeT;

我想在每个节点中插入的数据的结构,在main.c中定义:

typedef struct dataStructure
{
    int birthday;
    char *name;
}

1 个答案:

答案 0 :(得分:3)

您需要正确定义第二个typedef,例如

typedef struct dataStructure
{
    int birthday;
    char *name;
} dataStructure;

然后,一旦你分配/定义了结构,就可以像往常一样将第一种类型的指针设置为第二种:

dataStructure mydatastruct;
node->data = &mydatastruct;  //(void *) can point to anything

node->data = malloc(sizeof (dataStructure));  // direct allocation

如果要通过节点结构访问数据结构的成员,则需要将void指针强制转换为(dataStructure *),例如

((dataStructure *)node->data)->birthday = 1980;

宏可以帮助减少这个问题。

如果你的节点结构只是指向那个数据结构,那么直接指向它就会简单得多,而不是使用void指针。