我有一个名为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;
}
答案 0 :(得分:3)
您可以强制转换为void指针,如下所示:
inserNode->data = (void*)inArrayOfElements;
// ^ Explicit cast here
如果您要在链接列表的data
字段中存储多种类型的数据,则此要求非常有意义。
请注意,在C中,此类演员是可选的,仅用于可读性目的。从Anything*
到void*
的转换在C语言中严格说来是不必要的。在C ++中它不会,并且它有缺点,正如@WhozCraig在他的comment中指出的那样。所以在那里挑选你的毒药。