Je suis peu confus sur les paramètres de la fonction memcpy . Si j'ai
int* arr = new int[5];
int* newarr = new int[6];
et je veux copier les éléments de arr
dans newarr
en utilisant memcopy
,
memcpy(parameter, parameter, parameter)
Comment puis-je faire cela?
Donc, l'ordre est memcpy(destination, source, number_of_bytes)
.
Par conséquent, vous pouvez placer les anciennes données au début de newarr
avec
memcpy(newarr, arr, 5 * sizeof *arr);
/* sizeof *arr == sizeof arr[0] == sizeof (int) */
ou à la fin avec
memcpy(newarr+1, arr, 5 * sizeof *arr);
Parce que vous connaissez le type de données de arr
et newarr
, l'arithmétique des pointeurs fonctionne. Mais dans memcpy
, il ne connaît pas le type, il doit donc connaître le nombre d'octets.
Une autre alternative est std::copy
ou std::copy_n
.
std::copy_n(arr, 5, newarr);
Pour les types fondamentaux comme int
, la copie au niveau du bit effectuée par memcpy
fonctionnera correctement. Pour les instances de classe réelles, vous devez utiliser std::copy
(ou copy_n
) afin que l'opérateur d'affectation personnalisé de la classe soit utilisé.
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]);