2

如果函数是:可以void memcpy(char* dst, const char* src, size_t size)吗?

在 memcpy() 中使用 void 指针有什么好处?

4

3 回答 3

5

void1989 年标准中添加数据类型之前,类似的函数就是这样设计memcpy的。 char *是当时最接近“通用”指针的东西。

问题是,如果memcpy仍然使用char *参数并且您想调用memcpy不是数组的目标,则char必须显式转换指针值:

int foo[N];
int bar[N];
...
memcpy( (char *) foo, (const char *) bar, N * sizeof *foo );

因为您不能在没有强制转换的情况下将一种类型的指针分配给另一种类型。这在 ANSI C 之前不是(尽可能)问题,因为您没有函数原型;也就是说,编译器没有检查函数调用中参数的数量和类型是否与定义匹配,但现在肯定是个问题。

但是,与其他对象指针类型不同,您可以在不需要强制转换的情况下再次分配任何T *值,因此调用可以写为void *memcpy

memcpy( foo, bar, N * sizeof *foo );

我记得标准化前的日子(虽然我还在上大学)。铸造体操并不好玩。拥抱这种void *类型,因为它可以为您节省一些胃灼热。

于 2013-07-22T11:40:09.267 回答
2

如果函数是: void memcpy(char* dst, const char* src, size_t size) 可以吗?

是的,因为指针可以转换为另一种指针类型。

在 memcpy() 中使用 void 指针有什么好处?

避免强制转换为目标指针类型。

于 2013-07-22T06:58:39.173 回答
2

在中使用void指针有什么好处memcpy()

void 指针是通用指针,因此它可以接受指向任何类型的指针。

于 2013-07-22T07:00:06.473 回答