void*是指向对象类型的指针的捕获所有类型。使用中的一个例子是malloc函数,它被声明为
void* malloc(size_t);
指向 void 的返回类型意味着可以将返回值分配给malloc指向任何其他类型对象的指针:
int* vector = malloc(10 * sizeof *vector);
通常认为不显式将值转换为空指针和从空指针中转换为好做法。在特定情况下,malloc()这是因为使用显式转换,编译器可能会假设,但不会警告malloc(),如果您忘记包含 ,则返回类型不正确stdlib.h。也是使用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);