使用memcpy复制C++中的N-D数组
Copy N-D array in C++ using memcpy
我有一个4-D静态阵列
#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
都"有效"。在您的情况下,Foo
是一个三维阵列。
typedef unsigned char Foo[16][16][3];
@eeroika的答案是正确的,因为当Foo
是一个数组时,它的一个实例将衰减到与其第一个元素的地址相等的值。对于数组,其第一个元素的地址与数组本身的地址相同。但是,如果Foo
是非数组类型,则需要使用运算符的地址。
相关文章:
- Mongodb c++驱动程序:如何查询元素的数组
- 将数组的地址分配给变量并删除
- 从C++本机插件更新Vector3数组
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 数组索引的值没有增加
- 将对象数组的引用传递给函数
- 为char数组调整zlib-zpipe
- 2D数组来自文本输入,中间有空格
- std::向量与传递值的动态数组
- 在c++中用vector填充一个简单的动态数组
- 使用strcpy将char数组的元素复制到另一个数组
- 使用指针从C++中的数组中获取最大值
- C++使用整数的压缩数组初始化对象
- 告诉一个 const char 数组,除了编译时 C 样式的字符串外,它不以 '