这两个测试在编译时都没有给我错误,但是它们返回了不同类型的指针。
if __name__ == '__main__':
这特别令人困惑,因为我正在尝试重新创建memcpy函数,我无法判断是否应该返回一个void指针或一个unsigned char指针。
答案 0 :(得分:2)
在C中,任何对象指针类型都可以转换为void *
,void *
可以转换为任何对象指针类型而无需任何转换。
您的代码遵守这些规则;没关系。编译器不应该抱怨。
ISO / IEC 9899:2011§6.3.2.3指针:
¶1指向
void
的指针可以转换为指向任何对象类型的指针。指向的指针 任何对象类型都可以转换为指向void
并再次返回的指针;结果应该 比较等于原始指针。
请注意,'object'排除函数 - 函数指针具有单独的规则:
¶8指向一种类型函数的指针可以转换为指向另一种函数的指针 打字再回来;结果应该等于原始指针。如果转换了 指针用于调用类型与引用类型不兼容的函数, 行为未定义。