【发布时间】:2020-02-24 22:17:35
【问题描述】:
我有一个 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];
【问题讨论】:
-
@FedericoklezCulloca 这个骗子写得很糟糕,我认为(即使有这些答案,我什至无法清楚地理解这个问题......)它与一个更复杂的问题有关。这里单个
std::memcpy就足够了。 -
@Holt 我发布了两个不同的链接。如果你的意思是第一个,是的,我同意。第二个(我实际上标记为重复的那个)似乎更清楚。
-
@FedericoklezCulloca 我实际上指的是第二个。这是关于将“某物”从
int[100][100]复制到int[10][10]。我什至无法理解它是关于复制一行然后将其重塑为 10x10,还是关于复制子矩阵...这个问题要简单得多,因为它基本上是复制一行Stamps并将其展平。 .而且由于布局是连续的,所以基本上是std::memcpy(DynArr, Stamps[istamp], sizeof *Stamps);。 -
@Holt 我完全误读了链接的副本。删除两个链接。
-
顺便说一句,副本也可以是 3D 数组:
unsigned char (*DynArr)[16][3] = new unsigned char[16][16][3];只要内部维度的大小是编译时常量(16和3),外部维度大小(这里也是16)可以在运行时提供,并从DynArr的类型中省略。