我有一个名为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指针然后打印出来,但是我不确定这样做的语法
答案 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);
}