我对memcpy函数的参数感到困惑。如果我有
int* arr = new int[5];
int* newarr = new int[6];
我希望使用arr
将newarr
中的元素复制到memcopy
,
memcpy(parameter, parameter, parameter)
我该怎么做?
答案 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);
因为您知道arr
和newarr
的数据类型,所以指针算法有效。但是在memcpy
里面它不知道类型,因此它需要知道字节数。
另一种选择是std::copy
或std::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));