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

Copy N-D array in C++ using memcpy

我有一个 4 维静态数组

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

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

如何使用 memcpy 将一行从 Stamps 复制到动态数组:

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,这将 "work"。在您的例子中,Foo 是一个 3-D 数组。

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

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