一、C语言–内存操作函数memmove
1.1 memmove函数介绍
从source指针指向的位置开始,拷贝num个字节的内存块到destination中。
- memmove函数和memcpy函数十分相似:都可以实现内存的拷贝。
- 区别是,memmove可以用来destination和source有内存重叠时的拷贝
1.2 memmove使用示例
'//memmove 看名字是memory move其实他也是拷贝,但是可以应对内存重叠的情况。'
int main()
{
int a[] = { 1,2,3,4,5,6,7,8,9,10 };
memmove(a + 4, a + 2, 20);
for (int i = 0; i < 10; i++)
{
printf("%d ", a[i]); '//结果是:1 2 3 4 3 4 5 6 7 10 '
}
return 0;
}
二、模拟实现memmove函数
'//模拟实现memmove函数'
'//当source大于destination时,从左到右复制;否则就从右到左复制'
void* my_memmove(void* destination, void* source, size_t num)
{
void* result = destination;
while (num--)
{
if (source > destination)
{
*(char*)destination = *(char*)source;
source = (char*)source + 1;
destination = (char*)destination + 1;
}
else
{
*((char*)destination + num) = *((char*)source + num);
}
}
return result;
}
int main()
{
int a[] = { 1,2,3,4,5,6,7,8,9,10 };
my_memmove(a + 4, a + 2, 20);
for (int i = 0; i < 10; i++)
{
printf("%d ", a[i]);
}
return 0;
}
|