我正在从头开始编写memcpy,并且我一直在查找其他人的实现...我的实现是:
void* memcpy (void *destination, const void *source, size_t num)
{
char *D = (char*)destination;
char *S = (char*)source;
for(int i = 0; i < num; i++)
D[i] = S[i];
return D;
}
我研究过的各种其他来源和引用文献
void* memcpy (void *destination, const void *source, size_t num)
{
char *D = (char*)destination;
char *S = (char*)source;
for(int i = 0; i < num; i++)
{
*D = *S;
D++;
S++;
}
return D;
}
我无法理解其中的差异以及它们是否会产生不同的输出。让我特别困惑的部分是 D++;和S++;
最佳答案
现代编译器会将它们优化为相同的代码。这称为强度降低。 (返回值不同除外。)
关于C++ memcpy函数,为什么用*s++而不是s[i],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9303060/