void*和void类型
|???版權聲明:本文為博主原創文章,未經博主允許不得轉載。
?
void的類型是無類型的數據,void*表示無類型的指針。其中void*可以指向任何數據類型的指針。
void類型的用法:
(1)、void類型不能直接聲明變量,因為對于一個無類型的變量,編譯器是不知道要為這個數據分配多少個內存單元,如下:
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*等類型都不能相互轉換,要轉換的話必須進行強制類型的轉換)
int main(void) {void *a;int* value1;value1 = a; //錯誤return 0; }
(4)、數據類型的封裝,如下:
void* test(void* a, void*b);
C++中的memcpy函數和memset函數,memmove函數等函數都是。如下函數原型:
在這些函數的形式參數值為void*類型,它可以接受任何的數據類型的參數傳遞進來。
?
---------如有錯誤,希望大家多多指正---------
轉載于:https://www.cnblogs.com/geore/p/5816584.html
總結
以上是生活随笔為你收集整理的void*和void类型的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: matconvnet在ubuntu15.
- 下一篇: EXT Grid celleditor