我已经使用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 *,然后使用其地址。
答案 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*
指针;我们使用模板。