下面的问题在面试中得到了
如何使用memcpy将1个数组复制到另一个数组,使得目标数组与源数组相比具有反向数据。
仍然无法获得逻辑。
答案 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;
}