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