本篇文章簡單總結一下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