我看了看 http://www.opensource.apple.com/source/xnu/xnu-2050.24.15/libsyscall/wrappers/memcpy.c
并且不明白以下内容:
1-
里面
void * memcpy(void *dst0, const void *src0, size_t length) {
char *dst = dst0;
const char *src = src0;
行:
if ((unsigned long)dst < (unsigned long)src) {
我们如何将 dst 转换为 unsigned long ?这是一个指针!
2- 为什么他们有时喜欢向前复制,有时喜欢向后复制?
最佳答案
你是对的,这个实现是不可移植的,因为它假设指针适合unsigned long
。标准不保证这一点。
此实现的正确类型是 uintptr_t
,保证适合指针。
关于c - memcpy函数的实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20003192/