Memcpy技巧复制反向数组

时间:2018-06-21 07:02:26

标签: c

下面的问题在面试中得到了

如何使用memcpy将1个数组复制到另一个数组,使得目标数组与源数组相比具有反向数据。

仍然无法获得逻辑。

2 个答案:

答案 0 :(得分:0)

看着
http://en.cppreference.com/w/c/string/byte/memcpy
我会说明显的“技巧”已被明确禁止,因为size_t不允许使用否定词。

所以这个问题可能是一个技巧问题,答案将是

a)
不是。

b)
通过使用一个循环,逐个字节地循环遍历源和目标。

我有一个类似的问题要毕业,要求解决方案,结果证明它是缓慢的,低效的,不酷的-但可能。
关键是要发现这是可能的,尽管不是任何人实际会做的。

答案 1 :(得分:0)

让我们浏览开源的源代码,并查看基本的memcpy代码:

https://github.com/gcc-mirror/gcc/blob/master/libgcc/memcpy.c

/* Public domain.  */
#include <stddef.h>

void *
memcpy (void *dest, const void *src, size_t len)
{
  char *d = dest;
  const char *s = src;
  while (len--)
    *d++ = *s++;
  return dest;
}

您看到*d++ = *s++;部分吗?这意味着您只能使用++操作符不能向后移动,只能向前移动。

那么,我该如何记忆+反向?好吧,您需要一个附加的memreverse函数来完成最后一部分或创建一个函数revmemcpy

#include <stddef.h>

void *
revmemcpy (void *dest, const void *src, size_t len)
{
  char *d = dest + len - 1;
  const char *s = src;
  while (len--)
    *d-- = *s++;
  return dest;
}