我对memcpy函数的参数有点困惑。如果我有
int* arr = new int[5];
int* newarr = new int[6];
我想将元素复制arr
到newarr
using 中memcopy
,
memcpy(parameter, parameter, parameter)
我该怎么做呢?
所以顺序是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);
因为您知道 and 的数据类型arr
,所以newarr
指针算术有效。但是里面memcpy
不知道类型,所以需要知道字节数。
另一种选择是std::copy
or std::copy_n
。
std::copy_n(arr, 5, newarr);
对于基本类型,如int
,按位复制memcpy
将正常工作。对于实际的类实例,您需要使用std::copy
(or 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]);