C语言内存函数

⽬录:
1. memcpy使⽤和模拟实现
2. memmove使⽤和模拟实现
3. memset函数的使⽤
4. memcmp函数的使⽤
//1.2他们函数返回的是初始地址,使用时注意包含头文件<string.h>
1. memcpy使⽤和模拟实现
//memcpy————>可以理解为momory+copy-------->就是内存拷贝(相比较strcpy,它是只能拷贝字符串,局限性大。)

1 void * memcpy ( void * destination, const void * source, size_t num );
• 函数memcpy从source的位置开始向后复制num个字节的数据到destination指向的内存位置。
• 这个函数在遇到 '\0' 的时候并不会停下来。
• 如果source和destination有任何的重叠,复制的结果都是未定义的。


那重叠的怎么办呢?

-------->这就要用到我们的momcpy函数啦!

1 void * memmove ( void * destination, const void * source, size_t num );
和memcpy的差别就是memmove函数处理的源内存块和⽬标内存块是可以重叠的。

接下来就是mommove的模拟和实现了:

也许会有靓仔会有疑问:这个else里面写的是啥东西,看不懂啊,帖子?

别急,小帖接下来跟你仔细的解答:

我们使用my_mommove模拟应对重叠情况时:

需要考虑两种情况:1.src<dest  2.src>dest

对于第一种:如图一(将红色方框里面的数字移动到蓝色方框里面去),我们先要移动5再移动4再依次移动3,2,1(即从后往前移动)

为什么这样移动呢?

接下来看仔细了,别分心:假设是1,2,3,4,5的移动则里面的数字会变化变为:12145678910,再移动的话就会变为12125678910往后依次是12121678910,12121278910,121212178910,由此可知从前往后行不通,应为从第三项开始就变化了(1 2这两个数覆盖了原来的3 4)

第二种:原理同上(小铁,就偷一下懒啦!希望大家能够体谅,5啊)

memset的使用

 格式:void * memset ( void * ptr, int value, size_t num );

memcmp函数的使⽤
1 int memcmp ( const void * ptr1, const void * ptr2, size_t num );
• ⽐较从ptr1和ptr2指针指向的位置开始,向后的num个字节

//上式是将arr1与arr2比较:

如果arr1>arr2则返回大于零的数,arr1<arr2返回小于零的数,相等的时候返回零

  • 19
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值