如何在一个结构体中将另一个结构体赋值给一个空指针?

4
我需要帮助处理双向链表,其中节点的结构包含一个指向void的指针。如果我定义另一个结构,其中我想插入节点的实际数据,如何将其分配给指向void的指针?另外,如何打印列表?
我的节点结构在头文件中定义如下:
typedef struct nodetype
{
    struct nodetype *prev, *next;
    void *data;
} NodeT;

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

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

你正在使用的指针管理双向链表的参考资料在如何分配内存或将分配分配给指针方面一无所知把那本书烧了吧。 顺便说一下:你的dataStructure类型定义是不合法的。没有结束名称与typedef相关联。但是,nodetype看起来是正确的。 - WhozCraig
我忘记在dataStructure定义中添加“struct”。我收到的参考资料非常简短,不够全面。 - Tudor Ciotlos
1个回答

4
你需要正确定义第二个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

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

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

宏可以帮助减少这种丑陋的代码。

如果您的节点结构只会指向该数据结构,那么直接指向它比使用空指针简单得多。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接