关于memmove函数
一.memmove函数原型
void * memmove ( void * destination, const void * source, size_t num )
//num是拷贝的字节个数
//void* 类型是因为不知道这个数组存放的是什么类型的数据
//可能是整型 也可能是字符型
二.库函数memmove如何使用
int main()
{
int arr1[] = { 1,2,3,4,5,6,7,8,9,10 };
memmove(arr1, arr1 + 2, 20);
//20是字节哦 代表五个int类型的数字
//意思是将 34567从1的位置赋值给数组arr1
int i = 0;
for (i = 0; i < 10; i++)
printf("%d ", arr1[i]);
return 0;
}
结果为
三.对函数进行分析解剖
num是拷贝的字节个数
四.模拟实现
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
#include<assert.h>
void * my_memmove(void* dest, const void* strc, size_t num)
{
void* ret = dest;
assert(dest);
assert(strc);
//断言,防止数组为空
if (dest < strc)
{
//前向后
while (num--)
{
*(char*)dest = *(char*)strc;
//对dest和strc进行char*强制类型转换
//每次拷贝一个字节
//一共num次
dest = (char*)dest+1;
strc = (char*)strc + 1;
}
}
else
{
//'后向前
while (num--)
{
*((char*)dest + num)= *((char*)strc+num);
//从后向前的话
//就是从strc数组最后一个字节开始,就是第一个字节+sum
}
}
return ret;
}
int main()
{
int arr1[] = { 1,2,3,4,5,6,7,8,9 };
my_memmove(arr1, arr1+2, 20);
int i = 0;
for (i = 0; i < 9; i++)
{
printf("%d ", arr1[i]);
}
return 0;
}
如果将函数改成这样
my_memmove(arr1+2, arr1, 20);
最后,如果还有什么好的建议,欢迎在评论区提出