#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<assert.h>
// 返回的是目标空间的起始地址,为什么? 为了更好的观察目标空间的变化;
void* my_memcpy(void* dest, const void* src, size_t num)// num 的单位是字节
{
void* ret = dest;
assert(dest && src);
// *(char*)dest = *(char*)src; // 注意void* 类型的指针不能直接解引用和加减运算,所以要将其强制类型转化
// // 但强制类型转化是暂时的,所以有接下来的操作;
// dest = (char*)dest + 1; // dest 强转之后加1的地址赋给dest
// src = (char*)src + 1; // 因为强转是暂时的,所以左边的dest的类型还是void* ,void* 能接受任何类型的指针;
// // 但上面的写法只拷贝了一个字符,所以我们要设置一个循环;
while (num--)
{
*(char*)dest = *(char*)src;
dest = (char*)dest + 1;
src = (char*)src + 1;
}
return ret;
}
int main()
{
int arr1[] = {1,2,3,4,5,6,7,8,9,10 };
int arr2[8] = { 0 };
// 将arr1中的前5个数据拷贝到arr2中;
my_memcpy(arr2, arr1, 20);
return 0;
}
自己实现函数memcpy
最新推荐文章于 2024-04-20 17:30:10 发布