我有一个名为arrayOfElements的结构体数组,这些结构体被称为element它们有一个void指针
typedef struct {
void* data;
} Element;
malloc'd arrayOfElements
Element* arrayOfElements;
arrayOfElements= malloc(4 * sizeof(Element));
,并在strucs
中存储了int型和字符串。arrayOfElements[3].data = malloc( sizeof(int) );
ptr = arrayOfElements[3].data;
*ptr = 65;
拷贝字符串(arrayOfElements[1]。数据,令牌);
然后我创建了一个链表
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* arrayofstrucc指向arrayOfELements的实例之后,我如何打印arrayOfELements的void*数据[3],我从以前就知道这是一个int,它的值是65
LinkedList中的当前节点-> arrayOfElements[3] ->元素结构中的数据成员(应该等于65)
我有一种感觉,我应该指向一个int指针,然后打印它,但我不确定这样做的语法
您需要某种方法来知道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 = %dn", *pint);
}