Использование 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]);