目录
1. memcpy
void * memcpy ( void * destination, const void * source, size_t num );
1.1 代码演示

void* my_memcpy(void* dest, const void* src, size_t num)
{
void* ret = dest;
assert(dest && src);
while (num--)
{
*(char*)dest = *(char*)src;
src = (char*)src + 1;
dest = (char*)dest + 1;
}
return ret;
}
//4*3 + 3
int main()
{
/*int arr1[] = { 1,2,3,4,5,6,7,8,9,10 };
int arr2[20] = { 0 };
my_memcpy(arr2, arr1, 40);
*/
int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
memcpy(arr + 2, arr, 20);
return 0;
}


2.memove
void * memmove ( void * destination, const void * source, size_t num );
2.1 代码演示
int main()
{
//内存没有重叠
int arr1[] = { 1,2,3,4,5,6,7,8,9,10 };
int arr2[20] = { 0 };
//memcpy();
memmove(arr2, arr1, 20);return 0;
}
int main()
{
//内存重叠
int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
memmove(arr+2, arr, 20);return 0;
}

2.2 模拟实现
#include <assert.h>
void* my_memmove(void* dest, const void* src, size_t num)
{
assert(dest && src);
void* ret = dest;
if (dest < src) //1
{
//前->后
while (num--)
{
*(char*)dest = *(char*)src;
dest = (char*)dest + 1;
src = (char*)src + 1;
}
}
else //2 3
{
//后->前
while (num--)
{
*((char*)dest + num) = *((char*)src + num);
}
}
return ret;
}int main()
{
//内存重叠
int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
my_memmove(arr + 2, arr, 20);
/*my_memmove(arr, arr+2, 20);*/
return 0;
}


3. memset
代码块void * memset ( void * ptr, int value, size_t num );
3.1 代码演示
int main()
{
char arr[] = "hello world";
memset(arr+2, 'x', 5);
printf("%s\n", arr);return 0;
}


int main()
{
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
//能否将arr的每个元素设置为0
memset(arr, 0, 40);return 0;
}


3.2 总结
当有⼀块内存空间需要设置内容的时候,就可以使⽤memset函数,值得注意的是memset函数对内存单元的设置是以字节为单位的。
4.memcmp
代码块int memcmp ( const void * ptr1, const void * ptr2, size_t num );

int main()
{
int arr1[] = { 1,2,3,4,5,6,7,8,9,10 };
int arr2[] = { 1,2,3,4,8};
int r = memcmp(arr1, arr2, 17);
if (r > 0)
printf(">\n");
else if(r<0)
printf("<\n");
else
printf("==\n");return 0;
}

4.2 总结
如果要⽐较2块内存单元的数据的⼤⼩,可以使⽤ memcmp 函数,这个函数的特点就是可以指定⽐较⻓度。
memcmp 函数是通过返回值告知⼤⼩关系的