【问题标题】:How to pass arguments in function when the function has void* parameter?当函数具有 void* 参数时,如何在函数中传递参数?
【发布时间】:2016-03-11 07:36:30
【问题描述】:

我必须在queue 中实现入队操作。在节点结构中,dataPtrdatatypevoid*。 这是我的代码,但是在调用这个函数时我应该如何传递参数?

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;
}

【问题讨论】:

    标签: c data-structures queue


    【解决方案1】:

    队列的void *指针意味着它可以存储(指向)任何类型的数据;队列并不关心你在其中存储什么。

    因此,您可以只使用指向您的数据类型的指针来调用入队函数。应该不需要将其转换为(void *)

    【讨论】:

    • 同样,malloc返回的void*指针也不需要强制转换,可以赋值给任何指针类型。
    猜你喜欢
    • 2021-11-19
    • 2011-10-13
    • 1970-01-01
    • 1970-01-01
    • 2012-11-19
    • 1970-01-01
    • 2021-12-15
    • 2018-01-10
    • 2014-09-03
    相关资源
    最近更新 更多