剑指offer 之 memcpy

本文介绍了一个改进版的内存复制函数实现,该实现考虑了内存重叠的情况,并通过条件判断选择正序或倒序拷贝来解决这一问题。代码示例中详细展示了如何根据不同情况调整拷贝方向。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.该题目看似简单,但要考虑以下两点

 (1) 接口设计的通用性

 (2)需要考虑内存重叠的情况

以下为代码:

  1. void mymemcpy(void *dst, const void *src, size_t num)
  2. {
  3.     assert((dst != NULL) && (src != NULL));
  4.     const char *psrc = (const char*) src;
  5.     char* pdst = (char*)dst;
  6.     if (pdst > psrc && pdst < psrc + num) //如果内存发生重叠,需要进行倒序拷贝
  7.     {
  8.         for (int i = num - 1;i != -1; --i)
  9.         {
  10.             pdst[i] = psrc[i];
  11.         }
  12.     }
  13.     else
  14.     {
  15.         for (size_t i = 0;i < num;i++)
  16.         {
  17.             pdst[i] = psrc[i];
  18.         }
  19.     }
  20. }

 

转载于:https://www.cnblogs.com/sxgloverr1314/p/10604605.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值