void * 无类型指针/通用指针

void* 可以保存任何对象类型的指针,也就是说可以接收任何类型的指针。
关键点在于:
1、它可以接收任何对象指针

int *ip;
char *cp;
struct Foo *fp;

void *v;
v = ip;
v = cp;
v = fp;

2、不是任何类型,只是任何类型的地址,就是其本质是一个地址

void *v = 123;   // 错误:123 是整数,不是指针

3、不能直接解引用,也不能直接做指针算术

void *v = &a;
*v;      // 错误:不知道 v 指向多大、什么类型
v + 1;   // 标准 C 不允许,不知道步长

4、函数指针不保证能放进void*
C语言只保证对象指针和void*之间的转换,函数指针不保证

5、const要注意

const int a = 10;
void *v = &a;       // 会丢掉 const,通常不允许/警告
const void *cv = &a; // 应该这样

常见用途:
mallo返回void*,可以赋值给任意对象指针

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

泛型接口

void func(void *data);
posted @ 2026-09-21 18:05  心事不在脸上  阅读(10)  评论(0)    收藏  举报