【PVOID和VOID*】小結

轉載自:http://wuzheng-2008.blog.163.com/blog/static/82456057201201819660/ 


P表示指針,那麼PVOID表示:void *  ---無類型指針


所有指針都是一個32位二進制數(32位系統下),這個意義上說所有指針都是一樣的,它們的大小一樣,用於指向內存中的某處地址,然而指針爲什麼要有類型之分呢?答案是指針偏移。例如p爲一個指針,它指向內存某處地址,那麼p+1(或者寫p[1])是什麼意思呢?答案是p指向地址的後面那個地址,那麼後面多少呢?這就看指針類型了,假如它是字符指針,那麼就是後面一個字節,假如它是整型指針,那就是後面第四字節,假如它是一個結構體,那就是後面sizeof(結構體)個字節。可以說,指針有類型之分,完全就是爲了計算地址偏移。這一區別到了彙編級就沒有分別了,彙編級不存在指針類型,只有指針偏移數。


那麼void 指針是啥呢?答案是無類型指針。幹啥用呢?它只是一個地址指向,從不用計算偏移(void 了也沒法確定如何偏移了…),它只能指向一整塊內存,只能通過它來訪問這塊內存,不能用偏移訪問(p 1,p[1]等,千萬不要用在void指針上)。它的好處是什麼呢?答案是不用強制轉換,任何類型指針都可直接賦值給一個void 指針,而不用轉換。
例如:void *p :
char a :
int b :
p =&a :可以,不用轉換
p =&b :可以,不用轉換
那麼通過p 怎麼輸出a和b呢?可以,答案是強制轉換。*((int *)p ).*((char *)p )得到了對應類型的內容。
指針,真靈活……
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章