c++ - 在 C 中我可以将 void* 分配给 char* 但在 C++ 中不行

标签 c++ c windows char void-pointers

如果文件是 .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::ostreamstd::printf%p .

关于c++ - 在 C 中我可以将 void* 分配给 char* 但在 C++ 中不行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10200345/

相关文章:

连接两个字符指针

.net - 如何在 Windows Server 2003 上从 IIS 6 提供文件服务?

c++ - 编译器编程 : What are the most fundamental ingredients?

c++ - 对于大于 32,767 的值,强制转换为 "signed int"并返回 "signed short"如何工作?

c - 如何使嵌入在关于对话框中的 url 显示为超链接? (资源脚本.rc)

java - 在 Cucumber 中,如何传递文件路径的位置以使其适用于 Windows 和 MAC

c - 什么时候应该使用 Win32/WinAPI 类型与标准 C 类型?

c++ - 如何为数组分配不同的地址?

c++ - 导出 cmake-gui 选项

c++ - QML 文本元素上的 dataChanged?