使用 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
是非数组类型,则需要使用寻址运算符。
我有一个 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
是非数组类型,则需要使用寻址运算符。