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);