如果文件是 .c MSVC 将编译。
如果是 .cpp,它 “无法从‘void *’转换为‘unsigned char *’”
我在 windows.h
中使用 MEMORY_BASIC_INFORMATION::BaseAddress
,它是 void*
,将其分配给 char *
所以我可以看到你知道的实际地址?
当我将它转换为 char*,然后返回到 void*
(在 Windows 函数中使用它)时,它会出现错误并丢失数据或其他东西
怎么办?
最佳答案
在 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::ostream
和 std::printf
与 %p
.
关于c++ - 在 C 中我可以将 void* 分配给 char* 但在 C++ 中不行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10200345/