對指針的認識:
每個指針都有一個相關的類型。不同數據類型的指針之間的區(qū)別不是在指針的表示上,也不在指針所持有的值(地址)上——對所有類型的指針這兩方面都是相同的。不同之處在于指針所指的對象的類型上。指針的類型可以指示編譯器怎樣解釋特定地址上內存的內容,以及該內存區(qū)域應該跨越多少內存單元。當指針持有0值時,表明它沒有指向任何對象。
指針不能被初始化或賦值為其他類型對象的地址值。例如:不是說int類型的指針在物理上不能持有與double相關聯(lián)內存的地址,它能夠。但是不允許,因為雖然int型的指針和double型的指針能夠持有同樣的地址值,但對那塊內存的存儲布局和內容的解釋卻完全不同。
當然,如果我們要做的僅僅是持有地址值(可能是把一個地址同另一個地址作比較),那么指針的實際類型就不重要了。C++提供了一種特殊的指針類型來支持這種需求:空(void*)類型指針,它可以被任何數據指針類型的地址值賦值(函數指針不能賦值給它)。
void*表明相關的值是個地址,但該地址的對象類型不知道。我們不能夠操作空類型指針所指向的對象,只能傳送該地址值或將它與其他地址值作比較。
指針可以讓它的地址值增加或減少一個整數值,例如:加法指針加2意味著給指針持有的地址值增加了該類型兩個對象的長度。