在C中,我可以将void *分配给char *,但不能分配给C ++

时间:2012-04-17 22:50:33

标签: c++ c windows char void-pointers

如果文件是.c,MSVC将编译。

如果它是.cpp "cannot convert from 'void *' to 'unsigned char *'"

我正在使用MEMORY_BASIC_INFORMATION::BaseAddress中的windows.hvoid*,将其分配给char*,以便查看您知道的实际地址?

当我将它转换为char *,然后回到void*(在Windows函数中使用它)时,它就像错误并丢失数据或其他东西

怎么办?

1 个答案:

答案 0 :(得分:9)

在C ++中,您必须使用显式强制转换将void*转换为其他任何内容:

void *vp;
unsigned char *cp = static_cast<unsigned char *>(vp);

这确实与C中的情况不同,其中void*可以隐式转换为任何其他指针类型。相反的情况仍然如C:

void *vp = cp;  // no need for a static_cast

但是,我不明白为什么您需要char*来“查看实际地址”,void*可以按operator<< std::ostreamstd::printf打印。 1}}和%p与{{1}}。