memcpy 関数のパラメーターについて少し混乱しています。私が持っている場合
int* arr = new int[5];
int* newarr = new int[6];
arr
の要素をnewarr
を使用して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);
arr
とnewarr
のデータ型がわかっているため、ポインター演算が機能します。ただし、memcpy
の内部ではタイプがわからないため、バイト数を知る必要があります。
別の代替手段はstd::copy
またはstd::copy_n
です。
std::copy_n(arr, 5, newarr);
int
のような基本的なタイプの場合、memcpy
によって行われるビット単位のコピーは正常に機能します。実際のクラスインスタンスの場合、std::copy
(または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]);