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);
浙公网安备 33010602011771号