| 版權聲明:本文爲博主原創文章,未經博主容許不得轉載。函數
void的類型是無類型的數據,void*表示無類型的指針。其中void*能夠指向任何數據類型的指針。spa
void類型的用法:指針
(1)、void類型不能直接聲明變量,由於對於一個無類型的變量,編譯器是不知道要爲這個數據分配多少個內存單元,以下:blog
int main(void) { void a; //錯誤 return 0; }
若是存在上面例子中的語句的話,編譯器將報錯,以下圖:內存
(2)、void的類型做爲函數的返回值時,代表該函數不須要返回數據給函數的調用處。原型
(3)、void*聲明的變量能夠指向任何類型的指針,以下:編譯器
int main(void) { void *a; void *b; int value1 = 5; char value2 = 'm'; int *c = &value1; char *d = &value2; a = c; b = &d; cout << "void *a: " << a << endl; cout << "void *c: " << c << endl; cout << "void *b: " << b << endl; cout << "void *d: " << static_cast<void*>(&d) << endl; return 0; }
以下圖所示:void*變量指向的地址和複製變量的地址一致,說明voi*指針指向了特定的內存單元。編譯
可是,void*能夠指向任何類型的指針,可是其餘類型的指針卻不能夠指向void*類型,以下:這是由於類型不一致,int*不能轉換成void*類型,其餘的也同樣(char*,int*等類型都不能相互轉換,要轉換的話必須進行強制類型的轉換)ast
int main(void) { void *a; int* value1; value1 = a; //錯誤 return 0; }
(4)、數據類型的封裝,以下:class
void* test(void* a, void*b);
C++中的memcpy函數和memset函數,memmove函數等函數都是。以下函數原型:
在這些函數的形式參數值爲void*類型,它能夠接受任何的數據類型的參數傳遞進來。
---------若有錯誤,但願你們多多指正---------