So the order is memcpy(destination, source, number_of_bytes)
.
Therefore, you can place the old data at the beginning of newarr
with
memcpy(newarr, arr, 5 * sizeof *arr);
/* sizeof *arr == sizeof arr[0] == sizeof (int) */
or at the end with
memcpy(newarr+1, arr, 5 * sizeof *arr);
Because you know the data type of arr
and newarr
, pointer arithmetic works. But inside memcpy
it doesn't know the type, so it needs to know the number of bytes.
Another alternative is std::copy
or std::copy_n
.
std::copy_n(arr, 5, newarr);
For fundamental types like int
, the bitwise copy done by memcpy
will work fine. For actual class instances, you need to use std::copy
(or copy_n
) so that the class's customized assignment operator will be used.