以下我要介绍的4个函数都是可以对任意类型的数组进行操作,与上一篇字符函数和字符串函数的博客有所区分
1.memcpy函数的使用和模拟实现
原型:
1.1memcpy函数的使用
(1).函数memcpy从source的位置开始向后复制num个字节的数据到destination指向的内存位置。
(2).这个函数在遇到 '\0' 的时候并不会停下来。
(3).如果source和destination有任何的重叠,复制的结果都是未定义的。(即源空间和目标空间在内存中得地址不能一样)
注意:复制的字节数num不能比source的字节数多
1.2memcpy函数的模拟实现
2.memmove函数的使用和模拟实现
原型:
2.1memmove函数的使用
和memcpy的差别就是memmove函数处理的源内存块和⽬标内存块是可以重叠的,如果源空间和⽬标空间出现重叠,就得使⽤memmove函数处理。
2.2memmove函数的模拟实现
模拟实现的时候我们需要考虑到2种情况
(1).目标空间和源空间有部分重叠
而部分重叠的情况也分两种,如图:
这时候我们需要考虑将源空间src中的数据复制给目标空间的时候是从前向后复制还是从后向前复制了。
以下面第一种为例,如果是从后向前复制,dest中的3就变成了src中的5,而这个3的位置是两个空间重叠的位置,如果采用从后向前复制的方法,当我们想把src中的3复制给dest中的1时,我们发现这个3已经被改成了5,复制错了,所以第一种我们只能采用从前向后复制的方法,同理,第二种我们只能采用从后向前复制的方法。
(2).目标空间和源空间完全重叠或者没有重叠
这种情况我们从后向前复制或者从前向后复制都可以
3.memset函数的使用
原型:
memset是⽤来设置内存的,将内存中的值以字节为单位设置成想要的内容,例:
4.memcmp函数的使用
原型:
⽐较从ptr1和ptr2指针指向的位置开始,向后的num个字节,ptr1>ptr2返回>0的数,ptr2<ptr1返回<0的数。ptr1==ptr2返回0。