0
int x = 5;
int *xPtr = &x;
void **xPtrPtr = &xPtr;
printf("%d\n", *(int*)*xPtrPtr);

我有一个指向 int 指针的 void 指针。当我想取消引用时,正确转换 void 指针的语法是什么?上面的代码退出:

error: invalid conversion from ‘int**’ to ‘void**’

谢谢!

4

5 回答 5

4

对于 void 指针,您实际上并不需要知道有多少间接。

#include <iostream>
int main(void){
    int x = 5;
    int* pX = &x;
    void* pV = &pX;
    std::cout << "x = " << **(int**)pV << std::endl;
    // better use C++-Style casts from the beginning
    // or you'll be stuck with the lazyness of writing the C-versions:
    std::cout << "x = " << **reinterpret_cast<int**>(pV) << std::endl;
    std::cin.get();
}

输出:

x = 5
x = 5

在这里看到这个

于 2011-02-19T20:44:24.197 回答
0

指向 int 的指针是*((int **)xPtrPtr)

于 2011-02-19T20:36:57.257 回答
0
void **xPtrPtr = (void**)&xPtr;
于 2011-02-19T20:37:54.120 回答
0
    int x = 5;
    int *xPtr = &x;
    void **xPtrPtr = reinterpret_cast<void**>(&xPtr);
    int y = **reinterpret_cast<int**>(xPtrPtr);
    cout << y;

编译:没有错误。没有警告!

输出:

5

ideone 上的代码:http ://www.ideone.com/1nxWW

于 2011-02-19T20:39:55.967 回答
0

这编译正确:

#include <stdio.h>

int main(int argc, char *argv[]) {
   int x = 57; 
   int *xPtr = &x; 
   void **xPtrPtr = (void**)&xPtr; 
   printf("%d\n", *((int*)*xPtrPtr));
}
于 2011-02-20T17:36:23.923 回答