memcpy,memmove,memcmp,memset
void * memcpy (void * dest,const void * src,size_t count);
将src所指地址之后的count个字节的内容复制到dest所指地址之后的count个字节中。
模拟实现:
使用assert函数保证a与b不为NULL,需要#include<assert.h>使用。
地址加减,赋值时要进行强制类型转换,一个字节一个字节的访问。
此时的实现使用了最小单位(char代表1个字节),保证了数据不会丢失,但是使用void*类型的指针时,需要强制类型转换为char或者其他类型的指针再进行对应内存空间的数据操作。
memmove函数:
void * memmove (void * dest,const void * src,size_t count);
与memcpy不同的是,memmove的两个形参地址靠的非常近,使两个空间(dest到dest+count)
(src到src+count)有重叠的部分。这时就要考虑以什么方式来拷贝内容。
若dest<src,此时可以采取从前往后拷贝的方式避免src到srccount的数据被改动
而dest>src时则采用从后往前的拷贝方式避免src到srccount的数据被改动
实现: