在 C 中,我可以将 void* 分配给字符*,但不能在 C++ 中分配
In C I can assign void* to char* but not in C++
如果文件是.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::ostream
和std::printf
%p
按原样打印。
相关文章:
- 是否可以将函数导入命名空间,但不能导出它?
- std::unique_ptr 在 GCC 中工作,但不能在 Visual Studio 中编译
- 声明C++具有动态大小的数组类型在 Linux 中工作正常,但不能在 Windows 中工作
- 为什么我可以隐式地将字符*转换为常量字符*,但不能将无符号字符*
- std::chrono::d uration 可以按秒初始化,但不能按毫秒初始化?
- Python/C++:可以导入犰狳(arma::)但不能导入子程序arma::arma_rng::randn
- 为什么我可以从C++文件中读取 int 值,但不能浮点?
- C++程序在将 int 与 cin 一起使用时有效,但不能使用字符串
- SqLite c++,可以创建数据库,但不能将 anthing 插入到表中
- std::remove() 按预期处理文字,但不能与取消引用的迭代器一起工作
- 16 位系统中的程序如何访问大于 65535 的整数,但不能访问地址
- C++:返回本地对象,但不能正常工作
- 可以访问一个类中的播放器结构,但不能访问另一个类中的播放器结构
- 返回实例变量的c++方法可以访问变量中的数据,但不能更改它,但在编译时不会生成错误
- 用C++替换std::字符串中的一个子字符串,但不能全部替换
- C ++枚举可以与整数进行比较,但不能从整数分配?
- 为什么我可以打印动态分配的对象,但不能打印使用 cout <<在堆栈上创建的对象
- 为什么我可以分配一个对象数组,但不能将它们放在向量中
- 在 C 中,我可以将 void* 分配给字符*,但不能在 C++ 中分配
- 为什么检查分配操作的结果有效,但不能与其他条件相结合