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

In C I can assign void* to char* but not in C++

本文关键字:分配 但不能 C++ 字符 void 我可以      更新时间:2023-10-16

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

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

我正在使用MEMORY_BASIC_INFORMATION::BaseAddress windows.h这是void*,将其分配给char*以便我可以看到您知道的实际地址?

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

怎么办?

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

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

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

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

但是,我不明白为什么您需要一个char*来"查看实际地址",因为void*可以通过operator<< std::ostreamstd::printf %p按原样打印。

相关文章: