C语言内存函数

  以下我要介绍的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。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值