C中的数组/指针:在不知道底层类型的情况下进行复制

问题描述

|| 假设我有一个
unsigned char
指针(从现在开始是
uchar*
)指向与
uchar
不同的
T
类型数组的开头。知道此数组的大小并且它是连续的(使用
malloc
创建),是否可以在不知道another2ѭ类型的情况下将其复制到另一个数组?如何按字节访问它? 谢谢     

解决方法

        您可以使用简单的
memcpy
memmove
进行所有内容的浅表复制,但最好确保数组元素不是包含任何指针的类对象。或更确切地说,确保它们是POD。     ,        您可以执行以下操作:
T foo; // your given arbitrary object
T bar; // target

unsigned char * p = reinterpret_cast<unsigned char *>(&foo);  // type-punned
unsigned char * q = reinterpret_cast<unsigned char *>(&bar);  // ditto

memcpy(q,p,sizeof(T)); // copy byte-wise
如果ѭ2具有非平凡的属性(自定义构造函数,指向堆变量的指针等),则很有可能引起麻烦,但您当然可以通过这些指针访问原始数据。 (例如,如果要查看
double
的二进制表示或类似的东西,通常这样做可能会很有趣,但是在生产代码中,这种情况很少出现。) 如果原始对象是
T foo[N]
,请使用大小size12ѭ。 编辑:您是说要让它适用于任意类型还是未知类型?如果您不知道
T
的大小(例如,仅将指针交给了指针),那么您当然不能这样做,因为您不知道占用了多少内存。没有“字段分隔符”或类似的内容存储在内存中,您可以在运行时进行检查。