C++ memcpy函数,为什么用*s++而不是s[i]

标签 c++ memcpy

我正在从头开始编写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/

相关文章:

c++ - 您如何编写(可移植的)反向网络字节顺序?

c - 为 Core 2 或 Core i7 架构完全优化的 memcpy/memmove?

c++ - 我需要以反向方式复制一个长数组 我需要一个系统函数,例如 memcpy 有吗?

c - 如何将数据从一个结构指针复制到另一个结构成员

c++ - 如何截断字符串 [formatting] ? C++

c++ - 模板参数是模板的模板类特化

c++ - 按时间间隔分析音频数据的属性

c++ - 双五进制编码示例

c - 为什么 memcpy 返回的字符串永远不等于数组中存在的相同字符串?

c - strncpy 和 memcpy 之间的区别?