在C ++中使用memcpy

时间:2013-10-18 00:43:44

标签: c++ arrays memcpy

我对memcpy函数的参数感到困惑。如果我有

int* arr = new int[5];

int* newarr = new int[6];

我希望使用arrnewarr中的元素复制到memcopy

memcpy(parameter, parameter, parameter)

我该怎么做?

3 个答案:

答案 0 :(得分:23)

所以订单是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);

因为您知道arrnewarr的数据类型,所以指针算法有效。但是在memcpy里面它不知道类型,因此它需要知道字节数。

另一种选择是std::copystd::copy_n

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

对于像int这样的基本类型,memcpy完成的按位复制将正常工作。对于实际的类实例,您需要使用std::copy(或copy_n),以便使用类的自定义赋值运算符。

答案 1 :(得分:1)

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]);

答案 2 :(得分:-6)

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