我们如何将int *的地址传递给使用void **作为参数的函数?

时间:2019-07-01 10:53:42

标签: c++ pointers data-structures

我已经使用void指针做了一个堆栈ADT。这是main和queueFront函数-

bool queueFront(QUEUE *queue, void **itemPtr){
    if(queue->count == 0)
        return false;

    *itemPtr = queue->front->dataPtr;
    return true;
}

int main(){
    QUEUE *queue = createQueue();
    int *x = new int(5);
    enqueue(queue,x);
    int *y =new int(10);
    enqueue(queue,y);
    int *getPtr{nullptr};

    queueFront(queue, (void *)&getPtr);
    std::cout << *getPtr << std::endl;
}

我当前正在使用的书说在调用queueFront时使用“(void *)&getPtr”,但是编译器给出并给出错误信息“无效的转换从void *到void **”}。我知道可以使用(void **),但我想将int *转换为void *,然后使用其地址。

1 个答案:

答案 0 :(得分:3)

你不知道。 int**void**是两件事。

您应该创建一个void*,然后使用其地址。然后,如果您知道它指向int*,就可以安全地将其投射回int

int main(){
    QUEUE *queue = createQueue();
    int *x = new int(5);
    enqueue(queue,x);
    int *y =new int(10);
    enqueue(queue,y);
    void *getPtr{nullptr};

    queueFront(queue, &getPtr);
    std::cout << *(int*)getPtr << std::endl;
}

理想情况下,您会使用一本不是在1970年使用古代C习语编写的书;我们不再使用void*指针;我们使用模板。