Использование memcpy в C++

Я немного запутался в параметрах для memcpy

3 ответов


Итак, приказ memcpy(destination, source, number_of_bytes).

таким образом, вы можете разместить старые данные в начале newarr С

memcpy(newarr, arr, 5 * sizeof *arr);
/* sizeof *arr == sizeof arr[0]  == sizeof (int) */

или с

memcpy(newarr+1, arr, 5 * sizeof *arr);

потому что вы знаете тип данных arr и newarr, арифметика с указателями работает. Но внутри!--7--> он не знает тип, поэтому он должен знать количество байт.

Другой альтернативой является std::copy или std::copy_n.

std::copy_n(arr, 5, newarr);

для основных типов, таких как int, побитовая копия сделана memcpy будет работать нормально. Для реальных экземпляров класса необходимо использовать std::copy (или copy_n), так что будет использоваться настроенный оператор присваивания класса.


memcpy(dest,src,size)
dest -to which variable 
src - from which variable
size - size of src varible

int* arr = new int[5];    //source
int* newarr = new int[6];  // destination

for(int i = 0;i<5;i++) {arr[i] = i * 3;printf("  %d  ",arr[i]);}
memcpy(newarr,arr,sizeof(int)* 5);
for(int i = 0;i<5;i++) printf("%d",newarr[i]);

memcpy(*newarr, *arr, sizeof(arr));