本篇文章简单总结一下C++中void*的用法。在C++中,用void* 定义一个void类型的指针,它不指向任何类型的数据,意思是,void*指针“指向空类型”或“不指向确定的类型”,而不要理解为void*指针能指向“任何的类型”数据。简而言之,void*只提供一个地址,没有指向。void *的一些用法如下:
1. void *类型可以接受任意类型指针。
例如:
void *p1;
char *p2 = “hellp”;
p1 = p2;
或者
int a;
int *p = &a;
memset(p, 0, 4);
char c[4];
char *p = c;
memset(p, 0, 4);
memset的第一个参数就是void *。以上代码运行都是没有问题的,任何类型的指针都可以直接赋值给它,无需进行强制类型转换。但需要注意的一点是,void *的类型并不能无需类型转换直接赋值给其他类型,比如malloc的返回值是void *,那么我们一般这样写:char *p = (char *)malloc(4);
2.不允许使用void*指针操作它所指向的对象
例如,不允许对void*指针进行解引用。不允许对void*指针进行算术操作。
比如我们不要做类似这样的操作:
void *p;
p++;
另外,在实际开发中,void* 使用时最终都要强制转换成某种明确的数据类型。
参考https://blog.csdn.net/Gordennizaicunzai/article/details/78007584