void 指针作为参数并返回标准函数的值

Version > K&R

void*是指向对象类型的指针的所有类型。使用它的一个例子是 malloc 函数,它被声明为

void* malloc(size_t);

指向 void 的返回类型意味着可以将 malloc 的返回值赋给指向任何其他类型对象的指针:

int* vector = malloc(10 * sizeof *vector);

通常认为良好的做法是将值显式地转换为 void 指针。在 malloc() 的特定情况下,这是因为使用显式强制转换,如果你忘记包含 stdlib.h,编译器可能会假设但不警告 malloc() 的错误返回类型。这也是使用 void 指针的正确行为来更好地符合 DRY(不要重复自己)原则的情况; 将上面的内容与下面的内容进行比较,其中以下代码包含几个不必要的其他地方,其中拼写错误可能导致问题:

int* vector = (int*)malloc(10 * sizeof int*);

同样,功能如

void* memcpy(void *restrict target, void const *restrict source, size_t size);

将其参数指定为 void *,因为任何对象的地址,无论类型如何,都可以传入。此处,调用不应使用强制转换

unsigned char buffer[sizeof(int)];
int b = 67;
memcpy(buffer, &b, sizeof buffer);