在链接列表中打印void指针

时间:2016-10-27 03:28:41

标签: c pointers struct linked-list

我有一个名为arrayOfElements的结构数组,结构名为Elements,它有一个void指针

typedef struct {
    void* data;
} Element;

Ive malloc' arrayOfElements

Element* arrayOfElements;
arrayOfElements= malloc(4 * sizeof(Element));

并在strucs中存储了int和字符串

arrayOfElements[3].data = malloc( sizeof(int) );
ptr = arrayOfElements[3].data;
*ptr = 65;

strcpy(arrayOfElements [1] .data,token);

然后我创建了一个链接列表

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

并创建了一个函数来导入arrayOfELements的实例并使void * arrayOfStruct指向它

LinkedList* insert(LinkedList* head, Element* inArrayOfElements) { 
    LinkedList* insertNode = malloc(sizeof(LinkedList));

    insertNode->next = head;
    insertNode->arrayOfStruct = (void*)inArrayOfElements;

    return insertNode;
}

问题

我的问题是在我将void * arrayOfStruc指向arrayOfELements的一个实例之后,如何打印arrayOfElements [3]的void *数据,我之前知道它是一个int,它的值是65

LinkedList中的当前节点---> arrayOfElements [3] - > Element结构中的数据成员(应该等于65)

我有一种感觉我应该指向它的一个int指针然后打印出来,但是我不确定这样做的语法

1 个答案:

答案 0 :(得分:2)

您需要某种方式来了解data成员指向的数据类型。表示该类型的附加元素将起作用。

typedef enum {
    STR_TYPE,
    INT_TYPE,
    ...
} data_type;

typedef struct {
    data_type type;
    void* data;
} Element;

然后你可以像这样设置元素:

arrayOfElements[3].type = INT_TYPE;
arrayOfElements[3].data = malloc( sizeof(int) );
int *ptr = arrayOfElements[3].data;
*ptr = 65;

arrayOfElements[1].type = STR_TYPE;
strcpy(arrayOfElements[1].data, token );

并按如下方式阅读:

Element *curr = &list_node->arrayOfStruct[3];
if (curr->type == INT_TYPE) {
    int *pint = curr->data;
    printf("int data = %d\n", *pint);
}