2016-03-11 92 views
1

我必须在queue中实施排队操作。在节点结构中,datatypedataPtrvoid*。 这是我的代码,但在调用这个函数时,我该如何传递参数?当函数具有void *参数时如何在函数中传递参数?

typedef struct node 
{ 
void* dataptr; 
struct node* next; 
} QUEUE_NODE; 

typedef struct 
{ 
    QUEUE_NODE* front; 
    QUEUE_NODE* rear; 
    int count; 
}QUEUE; 

//createqueue 
QUEUE* createQueue(void) 
{ 
    QUEUE* queue; 
    queue = (QUEUE*)malloc(sizeof(QUEUE)); 
    if (queue) 
    { 
     queue->front = NULL; 
     queue->rear = NULL; 
     queue->count = 0; 
    } 
    return queue; 
} 
//Enqueue 
bool enqueue(QUEUE* queue, void* itemptr) 
{ 
    QUEUE_NODE* newptr; 
    if (!(newptr = (QUEUE_NODE*)malloc(sizeof(QUEUE_NODE)))) 
     return false; 
    newptr->dataptr = itemptr; 
    newptr->next = NULL; 
    if (queue->count == 0) 
     queue->front = newptr; 
    else 
     queue->rear->next = newptr; 
    (queue->count)++; 
    queue->rear = newptr; 
    printf("inserted value is%d\n", newptr->dataptr); 
    return true; 
} 

回答

5

void *指针队列的意味着它可以存储(指针)任何类型的数据;队列不关心你存储的内容。

因此,您可以使用指向您的数据类型的指针调用enqeue函数。不应该将它投射到(void *)

+1

类似地,不需要转换由'malloc'返回的'void *'指针,它可以被分配给任何指针类型。 –