11

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

int* arr = new int[5];

int* newarr = new int[6];

我想将元素复制arrnewarrusing 中memcopy

memcpy(parameter, parameter, parameter)

我该怎么做呢?

4

2 回答 2

26

所以顺序是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::copyor std::copy_n

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

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

于 2013-10-18T00:48:48.783 回答
0
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]);
于 2016-03-17T13:40:42.653 回答