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

#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.6k
2 个回答

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

在函数定义中加入:
char* ret = dest
返回值应为:
return ret
这样更严谨些

数据类型强制转换是当前有效

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进