模拟memcpy函数
功能及原理
- 我前几篇博客写的都是和字符串有关的函数,但实际工作中我们不禁想拷贝字符还想拷贝数组,那用字符拷贝就无法实现,这时就需要用到memcpy函数。
- 接收内存中的两个地址,和需要拷贝内容的字节数,进行拷贝。
- 头文件
#include <stdio.h>
#include <assert.h>
库函数的memcpy在 string.h 中。
代码
void *my_memcpy(void *dest, void *src, size_t count)
{
void *ret = dest;
assert(dest != NULL);
assert(src != NULL);
while (count)
{
*(char*)dest = *(char*)src;
dest = (char*)dest +1;
src = (char*)src +1;
count--;
}
return ret;
}
- 类型为(void* )因为我们使用时传入的类型不确定,有可能为字符、整形、浮点型所以用(void* )来接收
- 我们内部使用时将它强制转化为char*类型再解引用,因为char类型一个字节,可以兼容其他类型。
- 我们给dest和src加1时也要改变他的类型才可以,void型指针不能直接操作。
执行
int main()
{
int arr1[5] = {0};
int arr2[5] = {1,2,3,4,5};
//将123拷贝到arr1中
my_memcpy(arr1, arr2, 12); //三个正形元素共12个字节
for (int i = 0; i<5; i++)
{
printf("%d",arr1[i]);
}
return 0;
}
输出结果
12300