在链接列表中类推一个void指针

时间:2016-10-24 06:06:24

标签: c arrays struct linked-list

我有一个名为arrayOfElements的结构数组,我希望它们在链接列表中存储(以更好的术语指向),所以我对mallOfStrucs

进行了malloc>
arrayOfElements= malloc(4 * sizeof(Element));

然后一旦我输入了所有数据,我想将它传递给一个名为insert的函数,该函数导入列表的头部和结构数组

LinkedList* insert(LinkedList* head, Element* inArrayOfElements)

我的问题是,我被告知链表中的数据成员必须是无效*,这是一项艰难的要求。所以我的问题是,在函数插入中如何从链表中创建void *数据

typedef struct LinkedList {
    void* data
    struct LinkedList* next;
    } LinkedList;

指向导入的结构数组?

LinkedList* insert(LinkedList* head, Element* inArrayOfElements)
{ 
    LinkedList* insertNode = malloc(sizeof(LinkedList));
    insertNode->next = head;
    /*WHAT DO I DO HERE TO MAKE void* data point to inArrayOfELements*/
    return insertNode;
}

1 个答案:

答案 0 :(得分:3)

您可以强制转换为void指针,如下所示:

inserNode->data = (void*)inArrayOfElements;
//                ^ Explicit cast here

如果您要在链接列表的data字段中存储多种类型的数据,则此要求非常有意义。

请注意,在C中,此类演员是可选的,仅用于可读性目的。从Anything*void*的转换在C语言中严格说来是不必要的。在C ++中它不会,并且它有缺点,正如@WhozCraig在他的comment中指出的那样。所以在那里挑选你的毒药。