Скопируйте массив ND в C ++, используя memcpy - PullRequest
2 голосов
/ 29 октября 2019

У меня есть 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];

Ответы [ 2 ]

4 голосов
/ 29 октября 2019

Как это:

std::memcpy(DynArr, Stamps[row], sizeof Stamps[row]);
2 голосов
/ 29 октября 2019

Просто подумайте о проблеме, как о массиве 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 был типом, не являющимся массивом, вам нужно было бы использовать оператор address-of.

...