void*在the c++ programming language中解釋為:pointer to an object of unknown type. 即指向一未知型別的物件。
那麼我們什麼時候會用到或者見到void*指標呢?
在一些底層的**中,我們可能需要處理一片記憶體,但是我們並不知道這一塊記憶體儲存的到底是什麼型別的物件,在之後的例子中將會以memset
講解。
void*可以被賦值為任意型別物件的指標(隱式轉化),除了指向函式或者成員的指標void*可以被另乙個void*賦值
void*之間可以比較是否相等
void*可以被顯式轉化為其他型別
除以上的4點操作之外的其他操作都是不安全的
**引用自the c++ programming language
void f(int *p)
memset
的原型為:void * memset ( void * ptr, int value, size_t num );
其中第乙個引數為void*
,因為我們並不知道要memset
的到底是乙個int陣列,還是char型陣列之類的,所以我們用void*
來代表第乙個引數,在c標準庫一書中,memset
的實現如下:
void* memset(void* ptr, int value, size_t num)
}
在函式內的第2行,我們宣告乙個unsigned char*
型別的指標p,並在迴圈內,將其void*
隱式轉化為unsigned char*
型。
但是該**只能在gcc下編譯通過,如果用g++的話,必須要進行顯式型別轉化,**如下:
void* memset(void* ptr, int value, size_t num)
}
以及通過上面的**,我們不難看出為什麼對int
型陣列進行記憶體初始化:memset(a, 1, sizeof(a))
答案不對了= = void指標 void 的用法
指標有兩個屬性 指向變數 物件的位址和長度 但是指標只儲存位址,長度則取決於指標的型別 編譯器根據指標的型別從指標指向的位址向後定址 指標型別不同則定址範圍也不同,比如 int 從指定位址向後尋找4位元組作為變數的儲存單元 double 從指定位址向後尋找8位元組作為變數的儲存單元 1.void指標...
void指標 void 的用法
指標有兩個屬性 指向變數 物件的位址和長度 但是指標只儲存位址,長度則取決於指標的型別 編譯器根據指標的型別從指標指向的位址向後定址 指標型別不同則定址範圍也不同,比如 int 從指定位址向後尋找4位元組作為變數的儲存單元 double 從指定位址向後尋找8位元組作為變數的儲存單元 1.void指標...
void指標 void 的用法
指標有兩個屬性 指向變數 物件的位址和長度 但是指標只儲存位址,長度則取決於指標的型別 編譯器根據指標的型別從指標指向的位址向後定址 指標型別不同則定址範圍也不同,比如 int 從指定位址向後尋找4位元組作為變數的儲存單元 double 從指定位址向後尋找8位元組作為變數的儲存單元 1.void指標...