C语言void* 指针作为参数并将值返回给标准函数

例子

K&R

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