Deq*_*ing 2 c pointers void-pointers
如果函数是: 可以void memcpy(char* dst, const char* src, size_t size)吗?
在 memcpy() 中使用 void 指针有什么好处?
在之前void的1989年标准中加入数据类型,这是怎么样的功能memcpy设计。 char *是当时最接近“通用”指针的东西。
问题是,如果memcpy仍然使用char *参数并且您想调用memcpy不是 数组的目标,则char必须显式转换指针值:
int foo[N];
int bar[N];
...
memcpy( (char *) foo, (const char *) bar, N * sizeof *foo );
Run Code Online (Sandbox Code Playgroud)
因为你不能在没有强制转换的情况下将一种类型的指针分配给另一种类型。在 ANSI C 之前,这不是(同样多)问题,因为您没有函数原型;也就是说,编译器没有检查函数调用中参数的数量和类型是否与定义匹配,但现在这绝对是一个问题。
但是,与其他对象指针类型不同,您可以将任何T *值分配给void *并再次返回而无需强制转换,因此memcpy调用可以写为
memcpy( foo, bar, N * sizeof *foo );
Run Code Online (Sandbox Code Playgroud)
我记得标准化前的日子(虽然我还在上大学)。铸造体操并不好玩。拥抱这种void *类型,因为它可以为您节省一些胃灼热。