强制类型转换是当前行有效吗?以及此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个回答

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

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