强制类型转换是当前行有效吗?以及此memcpy模拟函数是否正确?

作者站长头像
站长
· 阅读数 7
#include <stdio.h>
#include <assert.h>
#include <memory.h>
void* my_memcpy(void* dest, const void* src, size_t num)
{
    assert(dest && src);
    while (num--)
        *((char*)dest)++ = *((char*)src)++;
    return dest;
}
int main()
{
    int arr1[] = { 1,2,3,4,5 };
    int arr2[5] = { 0 };
    my_memcpy(arr2, arr1, sizeof(arr1));
    memcpy(arr2, arr1, sizeof(arr1));
    return 0;
}

整型数组拷贝是对的,但不确定其他类型数据是不是都可以不考虑内存重叠的情况

回复
1个回答
avatar
test
2024-07-14

当前行有效,更确切的说是当前变量有效,即使在同一行的相同变量每个都需要类型转换。代码没看出问题,建议最好还是用库给的memcpy,因为大批量的数据拷贝的时候,库的 memcpy 可能会利用 DMA 来复制,而自己写的总是1个1个的复制,效率上会差很多。

回复
likes
适合作为回答的
  • 经过验证的有效解决办法
  • 自己的经验指引,对解决问题有帮助
  • 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
  • 询问内容细节或回复楼层
  • 与题目无关的内容
  • “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容