我有一个名为Example1的void *,它指向堆中动态分配的对象,但是我不知道该对象的数据类型,只知道它的大小。我如何对 void* 进行类型转换以便程序知道对象的大小? 例如,假设我有这个:
void* Example1;
Example1 = malloc(5); //A char* of size 5
现在假设我所知道的是Example1指向一个5的数组??? 而不是这个声明:
*((char*) Example1);
有没有类似这样的说法:
*( ((object of size 5)*) Example1);
我只是在寻找一种基于字节数而不是对象名称进行类型转换的方法。任何事情都会有帮助的。如果有一种方法可以在 C++ 中做这样的事情,我也会很感激。感谢您的帮助!
最佳答案
char
是大小为 1(根据定义)的对象。它可能不是唯一大小为 1 的对象,但它也是严格别名规则允许您使用的对象,无论对象的动态类型如何。
所以你已经有了正确的方法,不要再寻找替代方案了。
如果您的意思不是(大小为1的对象)
而是(大小为5的对象)
,那么char[5]
将干得好。
还有一个完全不同的问题,即对于一个您知道其大小但不知道其类型的对象,哪些操作有意义。并非所有对象都可以轻松复制!
关于c++ - 如何按字节数对 C(或 C++)对象进行类型转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28617745/