使用memcpy复制C++中的N-D数组

Copy N-D array in C++ using memcpy

本文关键字:N-D 数组 中的 C++ memcpy 复制 使用      更新时间:2023-10-16

我有一个4-D静态阵列

#define MAX_NUM 64
unsigned char Stamps[MAX_NUM][16][16][3];

其中每一行(即Stamps[MAX_NUM][][][](表示从图像裁剪的RGB补丁

如何使用memcpyStamps中的一行复制到动态数组:

unsigned char *DynArr = new unsigned char [16 * 16 * 3];

像这样:

std::memcpy(DynArr, Stamps[row], sizeof Stamps[row]);

只需将问题视为有一个Foo数组。

#define MAX_NUM 64
Foo Stamps[MAX_NUM];

现在您想要复制一个Foo

unsigned char *DynArr = new unsigned char[sizeof(Foo)];
std::memcpy(DynArr, &Stamps[row], sizeof(Stamps[row]));

这对任何类型的Foo都"有效"。在您的情况下,Foo是一个三维阵列。

typedef unsigned char Foo[16][16][3];

@eeroika的答案是正确的,因为当Foo是一个数组时,它的一个实例将衰减到与其第一个元素的地址相等的值。对于数组,其第一个元素的地址与数组本身的地址相同。但是,如果Foo是非数组类型,则需要使用运算符的地址。