1

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

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

我正在使用MEMORY_BASIC_INFORMATION::BaseAddressin windows.hwhich is void*,将其分配给 achar*以便我可以看到您知道的实际地址?

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

该怎么办?

4

1 回答 1

10

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

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

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

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

但是,我不明白为什么您需要 achar*来“查看实际地址”,因为 avoid*可以通过operator<<onstd::ostreamstd::printfwith按原样打印%p

于 2012-04-17T23:00:57.730 回答